Ngixn運維之六 server和 location配置
阿新 • • 發佈:2018-11-06
Ngixn運維之六 server和 location配置
初級配置案例
server {
listen 80;
server_name 118.1118.118.118 localhost www.example.cn examle.cn;
charset utf-8;
access_log /var/logs/nginx/access_example.log main;
#定義靜態資源位置
location / {
root /static;
index index.html index.htm;
}
location ^~ /example/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X- Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://apiexample;
client_max_body_size 10m;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /static;
}
}
server配置
- listen:監聽埠
- server_name:匹配訪問的ip地址或者域名,多個配置之間用空格分隔
- root:表示整個server虛擬主機內的根目錄,所有當前主機中web專案的根目錄
- index:使用者訪問web網站時的全域性首頁
- charset:用於設定預設編碼格式
- access_log:用於指定該虛擬主機伺服器中的訪問記錄日誌存放路徑 及日誌格式
- error_log:用於指定該虛擬主機伺服器中訪問錯誤日誌的存放路徑 及日誌格式
location 配置
Syntax: location [ = | ~ | ~* | ^~ ] uri { … } 或者 location @name { … }
Default: —
Context: server, location
nginx在解碼以 “%XX”形式編碼的文字和解析“.” 和 “…”的相對路徑以及將“//“轉為”/“之後得到的標準化URI執行匹配
location 可以由字首字串定義,也可以由正則表示式定義。正則表示式使用前面為“~*”修飾符(用於不區分大小寫的匹配)或“~”修飾符(用於區分大小寫的匹配)指定。若要找到給定請求的位置匹配,NGiNX首先檢查使用字首字串(字首位置)定義的位置。其中,選擇和記憶最長匹配字首的位置。然後按照配置檔案中出現的順序檢查正則表示式。正則表示式的搜尋在第一個匹配項上終止,並且使用相應的配置。如果找不到正則表示式的匹配,則使用前面記住的字首位置的配置。
- = location與URI的精確匹配,如果精確匹配成功,則匹配終止。
- ^~ 表示 uri 以某個常規字串開頭,理解為匹配 url 路徑即可。 nginx 不對 url 做編碼,因此請求為/static/20%/aa,可以被規則^~ /static/ /aa 匹配到(注意是空格)。
- ~ 表示區分大小寫的正則匹配
- ~* 表示不區分大小寫的正則匹配(和上面的唯一區別就是大小寫)
- !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配的正則
- / 通用匹配,任何請求都會匹配到,預設匹配。
例如有以下配置:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
location ~* .*\.(js|css)?$ {
[ configuration F ]
}
URI | 匹配 |
---|---|
/ | A |
/index.html | B |
/documents/document.html | C |
/images/1.gif | D |
/images/c/a | D |
/documents/1.jpg | G |
/resource/main.js?v=1.25 | F |
如果location由以/結尾的字首字串定義,並且請求由proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass或grpc_pass之一處理,則執行特殊處理。如果是 = 精確匹配但不是以/結尾的字首字串也會自動加上然後重定向處理。
例如:
location /user/ {
proxy_pass http://user.example.com;
}
location = /user {
proxy_pass http://login.example.com;
}