Nginx
在執行 Ghost 的 nginx 上阻止圖像熱連結也會破壞有效域上的圖像
我在 nginx 1.14.0 和 Ubuntu 18.04 上執行 Ghost。我正在嘗試阻止外部站點的圖像盜鏈。
我已經從這篇文章中添加了推薦的程式碼(以 location ~* .(gif|png|jpe?g)$ 開頭)以防止圖像盜鏈。
這是我的站點配置文件:
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 錯誤的外部請求。但是,當我在 Firefox 中使用網路檢查器檢查請求時,儘管引用者似乎來自https://example.com域,但它也會破壞圖像的本地顯示。
我嘗試將不同的伺服器添加到 valid_referers 行:localhost、127.0.0.1、伺服器的 ip、https : //example.com/*、http: //example.com/*。然而,無論我如何配置 valid_referers 行,當嘗試從本地站點載入圖像時,圖像仍然被阻止。
當我刪除整個熱連結阻止塊時,本地一切正常,並且圖像能夠被熱連結。
有任何想法嗎?這讓我快瘋了。提前致謝。
通過添加
location ~* \.(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; }