Nginx-配置二

##############負載均衡配置#############
#upstream是Nginx的HTTP Upstream模塊,這個模塊通過一個簡單的調度算法來實現客戶端IP到後端服務器的負載均衡。在上面的設定中,通過upstream指令指定了一個負載均衡器的名稱ixdba.net。這個名稱可以任意指定,在後面需要的地方直接調用即可。

#1\輪詢(默認)。每個請求按時間順序逐一分配到不同的後端服務器,如果後端某臺服務器宕機,故障系統被自動剔除,使用戶訪問不受影響
#upstream poll_svr {
#server 10.1.146.163;
#server 10.1.146.133;
#}


#2\Weight。指定輪詢權值,Weight值越大,分配到的訪問機率越高,主要用於後端每個服務器性能不均的情況下。
#upstream weight_svr{
#server 10.1.146.163 weight=2;
#server 10.1.146.133 weight=1;
#}


#3\ip_hash。每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個後端服務器,有效解決了動態網頁存在的session共享問題。
#upstream ip_hash_svr {
#ip_hash;
#server 10.1.146.163;
#server 10.1.146.133;
#}

###注意 當負載調度算法爲ip_hash時,後端服務器在負載均衡調度中的狀態不能是weight和backup。
#以上方式1,2,3爲nginx自帶,對以上幾種方式,每個server可以有以下幾種屬性值:
#1.down 表示單前的server暫時不參與負載
#2.weight 默認爲1.weight越大,負載的權重就越大。
#3.max_fails,fail_timeout:在fail_timeout指定的週期內,若有max_fails次失敗,則認爲服務在本週內不可用,下一fail_timeout週末,仍會嘗試訪問該服務。如果不進行設置,則max_fails默認值爲1,fail_timeou默認值爲10s。如果將max_fails值設爲0,則不進行此檢查。
#4.backup(0.6.7之後版本支持): 其它所有的非backup機器down或者忙的時候,請求backup機器。


#4\fair。比上面兩個更加智能的負載均衡算法。此種算法可以依據頁面大小和加載時間長短智能地進行負載均衡,也就是根據後端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx本身是不支持fair的,如果需要使用這種調度算法,必須下載Nginx的upstream_fair模塊。
#upstream fair_svr{
# server server1;
# server server2;
# fair;
#}
#按後端服務器的響應時間來分配請求,響應時間短的優先分配。需要第三方插件


#5\url_hash。按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,可以進一步提高後端緩存服務器的效率。Nginx本身是>不支持url_hash的,如果需要使用這種調度算法,必須安裝Nginx 的hash軟件包。
#upstream url_hash _svr{
#server 10.1.146.163;
#server 10.1.146.133;
#hash $request_uri;
#}
#使用此種方式時,如果一臺機器down掉,不會嘗試使用其它機器。對用戶端直接返回502 bad Gateway,需要第三方插件

#################################################################################################################

############緩存設置##########
proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=STATIC:10m;
#定義緩存的目錄 inactive=24h max_size=1g;
#levels=1:2表示記錄的緩存級別的1級目錄一個字符,2級目錄2個字符)
#proxy_temp_path /tmp/nginx/tmp keys_zone表示在內存中將緩存建立索引存儲在STATIC這個變量,且最大爲10
#緩存的臨時目錄 inactive=24h非活動連接保存24h小時,max_size=1g緩存大保存1g。
##################################

upstream www.a.com{
server 10.1.230.212:80 weight=2 max_fails=3 fail_timeout=20s;
server 10.1.230.213:80 down;
server 10.1.230.214:80 backup;
server 10.1.230.215:80 backup;
keepalive 32;
#指定了每個工作進程中保留的持續連接到nginx負載均衡器緩存的最大值。如果超過這個設置值的閒置進程想鏈接到nginx負載均衡器組,最先連接的將被關閉。應該注意:keepalive指令不限制nginx工作進程可以連接到nginx負載均衡器可以開啓的最大公工作進程,如有需要的話,新進程還是會被髮起。連接數應該被設置足夠低來滿足nginx負載均衡器處理新進的連接連接的將被關閉。應該注意:keepalive指令不限制nginx工作進程可以連接到nginx負載均衡器可以開啓的最大公工作進程,如有需要的話,新進程還是會被髮起。連接數應該被設置足夠低來滿足nginx負載均衡器處理新進的連接
}
upstream message{
server 10.1.0.222:80;
#server 10.1.230.217:80 weight=2 max_fails=3 fail_timeout=20s;
}
upstream phpjspasp{
server 10.1.230.212:80 weight=3 max_fails=3 fail_timeout=20s;
#server 10.1.230.219:8080 weight=2 max_fails=3 fail_timeout=20s;
}
upstream fastcgi{
server 10.1.230.212:9000;
}

server {
listen 80;
#偵聽80端口
server_name www.a.com;
#定義使用www.xx.com訪問
access_log /var/log/nginx/www.a.com-access_log main;
#設定本虛擬主機的訪問日誌
root /var/www/html/www.a.com;
#定義服務器的默認網站根目錄位置

autoindex on;
# 防止目錄瀏覽

location ~ /\.ht {
deny all;
# 防止.ht文件被請求
}
if ($host = 'a.com') {
rewrite ^/(.*)$ http://www.a.com/$1 permanent;
}
#如果訪問地址是a.com,則轉向www.a.com

location =/ {
#默認請求
index index.html index.php;
#定義首頁索引文件的名稱
#proxy_pass http://www.a.com;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
#proxy_next_upstream用來定義故障轉移策略,當後端服務節點返回500、502、503、504和執行超時等錯誤時,自動將請求轉發到upstream負載均衡組中的另一臺服務器,實現故障轉移。
#proxy_cache STATIC;
#proxy_cache_valid 200 302 1d;
#爲返回碼爲200,302的請求緩存1天
#proxy_cache_valid 404 1m;
#爲返回碼爲404的請求緩存1分鐘,404爲錯誤頁面
#include /etc/nginx/conf.d/proxy.conf;
#載入proxy的配置文件
}
#上面是對整個網站做負載均衡.實例中沒有開啓.

##############防盜鏈設置######################

###全站防盜鏈設置,server語句塊中一定要有root語句,或者將它放到location =/下面.否則不生效.
location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers none blocked server_names *.a.com *.b.com;
#none意爲不存在的Referer頭,也就是直接訪問網頁.
#blocked意爲根據防火牆僞裝Referer頭,如:“Referer: XXXXXXX”。
#server_names爲一個或多個服務器的列表,0.5.33版本以後可以在名稱中使用*通配符.valid_referers匹配多個站點白名單時,可以不用在多個站點前添加server_names參數
if ($invalid_referer) {
#if{}裏面內容的意思是,如果來路不是指定來路就跳轉到rewrite指定的頁面,當然直接返回404也是可以的。請確保server段中只有一個location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$,否則可能導致代碼無效,如有這個代碼段請合併或刪除。 切記:如果要跳轉到圖片,記得替換的圖片地址要使用沒有防盜鏈的網站圖片,否則由於替換的圖片其實也處於防盜鏈情況下,會造成仍舊無法顯示設置的圖片。
rewrite ^/ http://www.tangzhigui.com/content/uploadfile/201105/1167610aa17b0813233fe82d99403e4120110513175212.jpg;
#這裏是返回地址,建議用外部的地址.這個地址也不能開啓防盜鏈.
#return 404;
}
}

##########針對圖片目錄防止盜鏈
location /img {
root /var/www/html/www.a.com;
valid_referers none blocked *.a.com *.b.com;
if ($invalid_referer) {
rewrite ^/ http://www.tangzhigui.com/content/uploadfile/201105/1167610aa17b0813233fe82d99403e4120110513175212.jpg;
#return 403;
}
}

#使用第三方模塊ngx_http_accesskey_module實現Nginx防盜鏈
#NginxHttpAccessKeyModule實現防盜鏈
#如果不怕麻煩,有條件實現的話,推薦使用NginxHttpAccessKeyModule這個東西。
#他的運行方式是:如我的download 目錄下有一個 file.zip 的文件。對應的URI 是http://www.ccvita.com/download/file.zip
#使用ngx_http_accesskey_module 模塊後http://www.ccvita.com/download/file.zip?key=09093abeac094. 只有給定的key值正確了,才能夠下載download目錄下的file.zip。而且 key 值是根據用戶的IP有關的,這樣就可以避免被盜鏈了。
#據說NginxHttpAccessKeyModule現在連迅雷都可以防了,可以嘗試一下。

##############################################################

#######負載均衡配置#########

#靜態文件,nginx自己處理
location ~ ^/(p_w_picpaths|javascript|js|css|flash|media|static)/ {
root /var/www/html/www.a.com/doc/;
#過期30天,靜態文件不怎麼更新,過期可以設大一點,如果頻繁更新,則可以設置得小一點。
expires 30d;
}

#PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置.
#location ~ \.php$ {
#fastcgi_pass 10.1.230.212:9000;
#這樣所有的php文件都讓10.1.230.212這臺服務器執行,前提是10.1.230.212這臺服務器PHP文件的目錄同本機的目錄一致.
#比如本機有/var/www/html/www.a.com/index.php那10.1.230.212也同樣有這個目錄和文件纔可以.
#fastcgi_pass fastcgi;
#也可以用這種負載方式指定一組服務器.
#fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /var/www/html/www.a.com/$fastcgi_script_name;
#後面一定要跟PHP文件存放位置.
#include fastcgi_params;
#}
#把請求轉發給後臺web服務器,反向代理和fastcgi的區別是,反向代理後面是web服務器,fastcgi後臺是fasstcgi監聽進程,當然,協議也一樣。

location ~ .*\.(gif|jpg|jpeg|png|bmp|ico|txt|css)?$ {
expires 30d;
}
location ~ .*\.(htm|html)?$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 1h;
}
#靜態的由NGINX本身執行

location ~ .*\.(do|jsp|php|action)?$ {
proxy_pass http://phpjspasp;
#用上面定義的代理服務器執行
# proxy_pass http://10.1.230.212:80;
#也可以用這種方式來負載
include /etc/nginx/conf.d/proxy.conf;
}
location ^~ /servlet/ {
proxy_pass http://phpjspasp;
include /etc/nginx/conf.d/proxy.conf;
}
#訪問http://www.a.com/servlet下面的所有內容都負載到phpjspasp定義的服務器組中,但這些服務器中一定要有相關的php文件.
#動態的由phpjspasp這組服務器負載.

############################


######################錯誤頁面定義##############

#設置錯誤信息返回頁面,通過error_page指令可以定製各種錯誤信息的返回頁面。在默認情況下,Nginx會在主目錄的html目錄中查找指定的返回頁面,特別需要注意的是,這些錯誤信息的返回頁面大小一定要超過512K,否者會被ie瀏覽器替換爲ie默認的錯誤頁面。
error_page 403 404 /40x.html;
error_page 500 502 503 504 /50x.html;
#這裏定義兩個錯誤頁面,403 404轉到40x.html.500 502...轉到50x.html

location = /50x.html {
root /var/www/html/www.a.com/error;
#這裏定義50x.html錯誤頁面,/var/www/html/www.a.com/error下面一定要存在50x.html
}

location = /40x.html {
root /var/www/html/www.a.com/error;
#這裏定義40x.html錯誤頁面,/var/www/html/www.a.com/error下面一定要存在40x.html
}


################################################

#########################nginx狀態##############

location /NginxStatus {
stub_status on;
#stub_status設置爲“on”表示啓用StubStatus的工作狀態統計功能。.
access_log /var/log/nginx/NginxStatus.log;
#access_log 用來指定StubStatus模塊的訪問日誌文件。
auth_basic "NginxStatus";
#auth_basic是Nginx的一種認證機制。
auth_basic_user_file /etc/nginx/htpasswd;
#auth_basic_user_file用來指定認證的密碼文件,由於Nginx的auth_basic認證採用的是與Apache兼容的密碼文件,因此需要用Apache的htpasswd命令來生成密碼文件.
#例如要添加一個webadmin用戶,可以使用下面方式生成密碼文件:
#/usr/local/apache/bin/htpasswd -c /opt/nginx/conf/htpasswd webadmin
#會得到以下提示信息:
#New password:
#輸入密碼之後,系統會要求再次輸入密碼。確認之後添加用戶成功。
}
#################################################
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章