Nginx-location語法總結

upstream www.a.com{
server 10.1.230.215:80 weight=2 max_fails=3 fail_timeout=20s;
server 10.1.230.216:80 weight=2 max_fails=3 fail_timeout=20s;
server 10.1.230.217:80 weight=2 max_fails=3 fail_timeout=20s;
server 10.1.230.218:80 backup;
keepalive 32;
check interval=3000 rise=2 fall=5 timeout=1000;
}
upstream tomcat{
server 10.1.230.215:8080 weight=4 max_fails=3 fail_timeout=20s;
server 10.1.230.216:8080 weight=1 max_fails=3 fail_timeout=20s;
server 10.1.230.217:8080 weight=1 max_fails=3 fail_timeout=20s;
server 10.1.230.218:8080 backup;
check interval=3000 rise=2 fall=5 timeout=1000;
}

upstream iis{
server 10.1.230.215:80 weight=1 max_fails=3 fail_timeout=20s;
server 10.1.230.216:80 weight=4 max_fails=3 fail_timeout=20s;
server 10.1.230.217:80 weight=1 max_fails=3 fail_timeout=20s;
server 10.1.230.218:80 backup;
check interval=3000 rise=2 fall=5 timeout=1000;
}

upstream php{
server 10.1.230.217:80;
server 10.1.230.215:80;
server 10.1.230.216:80;
server 10.1.230.218:80;
ip_hash;
check interval=3000 rise=2 fall=5 timeout=1000;
}

proxy_temp_path /tmp/nginx/temp;
#設置臨時目錄
proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#設置緩存目錄爲二級目錄,共享內存區大小,非活動時間,最大容量,注意臨時目錄要跟緩存目錄在同一個分區。

autoindex on;
# 防止目錄瀏覽

server {
listen 80;
#偵聽80端口
server_name www.a.com;
#定義使用www.xx.com訪問
access_log /var/log/nginx/www.a.com-access_log main;

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

location ~ /\.ht {
deny all;
# 防止.ht文件被請求
}

if ($host = 'a.com') {
rewrite ^/(.*)$ http://www.a.com/$1 permanent;
}
#如果訪問地址是a.com,則轉向www.a.com


location =/ {
#這個規則優先級是最高的。僅僅匹配/
proxy_pass http://www.a.com;
include /etc/nginx/conf.d/proxy.conf;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
#proxy_next_upstream用來定義故障轉移策略,當後端服務節點返回500、502、503、504和執行超時等錯誤時,自動將請求轉發到upstream負>載均衡組中的另一臺服務器,實現故障轉移
}
#訪問首頁負載到www.a.com這組服務器。這裏並不包括http://www.a.com/index.html,因爲下面html會被緩存。

location ^~/(images|doc)/ {
#這個是其它的匹配規則,匹配 url路徑即可。nginx不對url做編碼,因此請求爲/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)。再向下就按出現的順序匹配。
#所有訪問http://www.a.com/images/....或者http://www.a.com/doc/...都被緩存。保存24小時。
include /etc/nginx/conf.d/proxy.conf;
proxy_pass http://www.a.com;
proxy_cache cache_one;
#對不同的HTTP狀態碼設置不同的緩存名稱
proxy_cache_key $host$uri$is_args$args;
#proxy_cache_key 指定了包含在緩存中的緩存關鍵字(默認情況下服務器的主機名並沒有包含到緩存關鍵字中)
proxy_cache_valid 200 304 12h;
#以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內
expires 24h;
#設置過期時間爲24H
}

location /login {
proxy_pass http://www.a.com;
include /etc/nginx/conf.d/proxy.conf;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
}
#訪問http://www.a.com/login匹配這條規則。


#tomcat負載1
#location ~ \.(do|jsp|action|xml)$ {
# proxy_pass http://tomcat;
# include /etc/nginx/conf.d/proxy.conf;
# proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
#}
#這裏被區分大小寫

#tomcat負載2
location ~ .*\.(do|jsp|action|xml)?$ {
proxy_pass http://tomcat;
include /etc/nginx/conf.d/proxy.conf;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
}
#這個不區分大小寫。

#location !~ \.xhtml$ {
#規則F
#}
#location !~* \.xhtml$ {
#規則G
#}
#上面兩個規則,當訪問 http://www.a.com/a.xhtml 不會匹配規則F和規則G,http://localhost/a.XHTML不會匹配規則G,因爲不區分大小寫。規則F,規則G屬於排除法,符合匹配規則但是不會匹配到.

#ASP負載
location ~*\.(aspx|asp|config)$ {
proxy_pass http://iis;
include /etc/nginx/conf.d/proxy.conf;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
}

#PHP負載,perl cgi負載
location ~*\.(php|cgi)$ {
proxy_pass http://php;
include /etc/nginx/conf.d/proxy.conf;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
}

location ~* /purge(/.*)
#當訪問http://www.a.com/purge/...時會匹配這個規則。
{
allow 10.1.230.35;
#allow 10.1.230.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
location ~*\.(png|jpg|gif|GIF|jpeg|JPG|PNG|bmp|BMP|JPEG|ico|txt|css|js|htm|html)$
#訪問所有不區分大小寫PNG,JPG等結尾的匹配這裏。

{
include /etc/nginx/conf.d/proxy.conf;
proxy_pass http://www.a.com;
proxy_cache cache_one;
#對不同的HTTP狀態碼設置不同的緩存名稱
proxy_cache_key $host$uri$is_args$args;
#proxy_cache_key 指定了包含在緩存中的緩存關鍵字(默認情況下服務器的主機名並沒有包含到緩存關鍵字中)
proxy_cache_valid 200 304 12h;
#以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內
expires 24h;
#設置過期時間爲24H
}

#圖片文件開啓緩存,並允許一些機器清除緩存。
#如http://www.a.com/image/a.jpb.jpg這個訪問圖看,則需http://www.a.com/purge/image/a.jpb.jpg來清除緩存。這裏的順序是purge在前,\.(png|jpg等在後。

location / {
proxy_pass http://www.a.com;
include /etc/nginx/conf.d/proxy.conf;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
#proxy_next_upstream用來定義故障轉移策略,當後端服務節點返回500、502、503、504和執行超時等錯誤時,自動將請求轉發到upstream負>載均衡組中的另一臺服務器,實現故障轉移
}
#這個是默認規則,通用規則。當所有規則不匹配時匹配這裏的規則。


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

location ~*/NginxStatus?$ {
#這裏的~*表示不區分大小寫,http://www.a.com/nginxstatus或者NGINXSTATUS都可以打開。如果沒有後面的?$表示結尾,則輸入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:
#輸入密碼之後,系統會要求再次輸入密碼。確認之後添加用戶成功。
}
#################################################

location /status {
check_status;

access_log off;
allow 10.1.230.35;
deny all;
}

}

以上是一個比較全的配置,實際應用中要根據自己的情況來配置。


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