Блокирование хотлинкинга изображений на запущенном nginx Ghost также разбивает изображения в допустимом домене

Я запускаю Ghost на nginx 1.14.0 и Ubuntu 18.04. Я пытаюсь заблокировать хотлинкинг изображений с внешних сайтов.

Я добавил рекомендуемый код из этого сообщения (начинается с местоположения ~ *. (Gif | png | jpe? G) $), чтобы предотвратить изображение hotlinking.

Вот файл конфигурации моего сайта:

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name example.com;
root /var/www/example.com/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/nginx/snippets/ssl-params.conf;

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:2368;
}

location ~* \.(gif|png|jpe?g)$ {
    valid_referers none blocked example.com *.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

location ~ /.well-known {
    allow all;
}

client_max_body_size 50m;}

Проблема в том, что когда я добавляю этот блок кода и перезапускаю nginx, он работает правильно и блокирует внешние запросы, возвращающие ошибку 403 Forbidden. Однако он также нарушает локальное отображение изображений, несмотря на то, что реферер, по-видимому, исходит из домена https://example.com , когда я использую сетевой инспектор в Firefox для проверки запроса.

Я пробовал добавление различных серверов в строку valid_referers: localhost, 127.0.0.1, ip сервера, https://example.com/* , http://example.com/* . Тем не менее, независимо от того, как я настраиваю строку valid_referers, изображения все равно блокируются при попытке загрузить их с локального сайта.

Когда я удаляю весь блок блокировки хотлинков, все работает нормально локально, и изображения можно связывать горячими.

1288] Есть идеи? Это сводило меня с ума. Заранее спасибо.

1
задан 9 October 2020 в 21:44
1 ответ

Добавив местоположение ~* \.(gif|png |jpe?g)$, эти URI не обрабатываются блоком location /. См. , как Nginx обрабатывает запрос.

Вам нужно будет сделать операторы proxy_xxx доступными для нового блока. Операторы proxy_set_header могут наследоваться.

Например:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;

location / {
    proxy_pass http://127.0.0.1:2368;
}

location ~* \.(gif|png|jpe?g)$ {
    valid_referers none blocked example.com *.example.com;
    if ($invalid_referer) {
        return 403;
    }
    proxy_pass http://127.0.0.1:2368;
}
2
ответ дан 10 October 2020 в 06:24

Теги

Похожие вопросы