Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Nginx 進階設定:目錄密碼保護、防盜鏈、下載限速、多域名優化

編輯:Linux 系統常見問題解答

前言

Nginx 輕量高效,透過模組與變數可實現多種進階功能。本文整理四大常見需求的設定範例與注意事項。

一、目錄密碼保護與存取限制

設定範例

# 建立密碼檔(需安裝 httpd-tools 或 apache2-utils)
htpasswd -bc /usr/local/nginx/htpasswd username password

# nginx.conf 中的 server 區塊內
location ~ /admin {          # 保護 /admin 目錄
    auth_basic "PLEASE LOGIN";
    auth_basic_user_file /usr/local/nginx/htpasswd;
}

location ~ \.php$ {          # PHP 處理區塊**必須放在保護區塊之後**
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/bbs$fastcgi_script_name;
    include fastcgi_params;
}

關鍵順序: 目錄保護 location 必須置於 location ~ \.php$ **之前**,否則 PHP 檔案會繞過驗證直接執行。

二、防盜鏈設定

location ~* \.(txt|ico|gif|png|bmp|jpg|jpeg|zip|rar|gz|7z|exe|mp3|flv|swf)$ {
    valid_referers none blocked example.com www.example.com;
    if ($invalid_referer) {
        rewrite ^/ https://example.com/403.html permanent;
        # 或 return 403;
    }
}
  • valid_referers:允許的 Referer 來源,none 允許無 Referer(直接輸入網址),blocked 允許被防火牆過濾的 Referer。
  • $invalid_referer:若 Referer 不在名單中,值為 1。
  • 建議查看 access_log 驗證成效,勿只用瀏覽器測試(CDN/搜尋引擎可能快取圖片)。

三、下載限速與連線數限制

# http 區塊定義共享記憶體區
limit_zone crawler $binary_remote_addr 20m;

# server 區塊套用
location ~ \.(zip|rar|gz|tar|exe|mp3|flv|swf|jpg|jpeg)$ {
    limit_conn crawler 1;       # 限制單 IP 單連線
    limit_rate 500k;            # 限速 500 KB/s
}

# 或針對特定目錄
# location /download/ {
#     limit_conn crawler 1;
#     limit_rate 500k;
# }

注意: Nginx 1.1.7+ 應使用 limit_conn_zone 取代 limit_zone,語法為 limit_conn_zone $binary_remote_addr zone=crawler:20m;。

四、多域名與 SERVER_NAME 優化

問題現象

設定 server_name www.example.com *.example.com example.com; 時,PHP $_SERVER['SERVER_NAME'] 永遠回傳第一個域名(www.example.com),導致泛域名應用失效。

解決方案

# 修改 fastcgi_param 來源為 $host(實際請求的 Host 標頭)
fastcgi_param SERVER_NAME $host;

# 關閉內部重導向時自動使用 server_name 第一個域名
server_name_in_redirect off;

重新載入 Nginx 後,PHP 即可正確取得實際請求域名。

總結

  • 目錄保護注意 location 順序。
  • 防盜鏈以 valid_referers + $invalid_referer 實作。
  • 限速使用 limit_conn_zone + limit_rate。
  • 多域名環境必設 fastcgi_param SERVER_NAME $host; 與 server_name_in_redirect off;。
Copyright © Windows教程網 All Rights Reserved