Nginx常用功能詳解

NGiNX 是個非常優秀的HTTP 服務器軟件,可以通過設置有實現許多功能,如目錄保護、IP訪問限制、防盜鏈、下載限速及設置多域名等等

 

一、NGINX目錄保護及訪問限制

Nginx保護目錄的配置如下,目錄密碼保護文件是 /usr/local/nginx/htpasswd

location ~ /admin {

#admin爲要保護的目錄名稱,location 的意思就是保護從網頁根目錄算起的admin 目錄

auth_basic     ”PLEASE LOGIN”;      #就是進入資料夾時會顯示的信息

auth_basic_user_file /usr/local/nginx/htpasswd; #驗證用戶及密碼文件,我這邊設定是放在 /usr/local/nginx/htpasswd

}

location ~ \.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 ~ \.php$ {}區塊後面,如果打開的是靜態頁面或圖片等非php文件,會提示要輸入密碼,但是,如果打開的是php文件,則設置無效,會直接執行php文件並顯示。因此,一定要注意把要設置目錄密碼保護的區塊放在location ~ \.php$ {}區塊之前。

生成密碼文件:

htpasswd -b -c /usr/locla/nginx/htpasswd username password;

二、NGINX防盜鏈

另外 NGiNX 防盜鏈,防止別人偷圖(視頻、flash、軟件…)當然也是 OK 滴!  一樣也是在 server 的區段加上

location ~* \.(txt|ico|gif|png|bmp|jpg|jpeg|zip|rar|gz|7z|exe|mp3|flv|swf)$ {

valid_referers none blocked jb51.net www.jb51.net ;

if ($invalid_referer) {

rewrite ^/ http://www.jb51.net/notlink.html;

}

}

這時候 location 的意思就是保護從網頁根目錄算起,所有的指定類型的文件都依照此規則

valid_referers none blocked 的意思就是不阻擋從哪些地方來的囉~ 這邊以空格來分隔允許的域名或 ip 位置

$invalid_referer 的意思就是不允許連結

rewrite ^/ http://www.jb51.net/notlink.html; 的意思就是指定不允許的連結自動轉向到一個頁面,或是已經有設定 404 轉址的也可以先註解掉這行再把 #return 404 的註解拿掉,就會自動跑到你設定的 404 頁面了。

特別提醒:如何來看防盜鏈是否是生效的,建議大家直接看服務日誌,不要拿個網站來測試。因爲有些不要臉的傢伙(比如某度),他會用自己的圖片服務器來提供服務。就是因爲這個原因,上一次我在做這個的時候,浪費了很多時間。

三、NGINX下載限速

NGiNX 還能限速再限制下載線程!  先在 http 區段找到 limit_zone,再把註釋拿掉~

# 設定一個叫做 crawler 的區域,大小爲 20MB

limit_zone crawler $binary_remote_addr 20m;

然後在 server 的區段加上

# 限制檔案類型只能單線下載

location ~ .*\.(zip|rar|gz|tar|exe|mp3|flv|swf|jpg|jpeg)$

{

limit_conn crawler 1;

limit_rate 500k; # 再加上限速

}

# 限制特定資料夾底下只能單線下載

# location /download/ {

# limit_conn crawler 1;

# limit_rate 500k; # 再加上限速

# }

四、NGINX多域名設置

今天在配置PHP+Nginx時出現一個嚴重的問題,在Nginx虛擬主機上綁定了泛域名,在程序中需要用二級域名指向不同的內容,但無論如何訪問都只跳轉到主域名上!爲了找到問題,一個一個試驗,得出如下結論:不管綁定多少域名,用 $_SERVER["SERVER_NAME"] 只會返回虛擬主機中綁定的第一個域名!

比如綁定域名如下:

server_name     www.jb51.net *.jb51.net jb51.net

現在我不管用什麼域名訪問, $_SERVER["SERVER_NAME"] 都只會返回 www.jb51.net !!這是個很嚴重的問題,對泛域名造成了致命的影響!

既然有問題,就肯定有解決方案。。在wiki主翻了N久,終於找到了需要的資料!原來:$_SERVER["SERVER_NAME"] 返回的值是由 Nginx 的 fastcgi_param 中 SERVER_NAME 提供的,而默認的配置爲:

fastcgi_param  SERVER_NAME    $server_name;

Nginx中 $server_name 變量就是上面設置的域名,只會返回第一個!

這下好辦了,把上面的配置改成:

fastcgi_param  SERVER_NAME    $host;

就行了。

另外還需要在server_name配置後面加一行:

server_name_in_redirect off;

意思是 讓 nginx 在處理自己內部重定向時不默認使用  server_name 設置中的第一個域名!

內容來源於 小紅提技術博客,http://www.xiaohongti.com/ 轉載請保留地址,尊重版權。

發佈了60 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章