匹配之前渣玲,URL會(huì)被預(yù)處理
- 解碼
- 將包含.和..的相對(duì)路徑去除
- 將//兩條斜線合并成一條/
匹配規(guī)則
- 前綴字符串基茵,正則表達(dá)式,兩種location
- ~*不區(qū)分大小寫
- ~區(qū)分大小寫
- 掃描所有prefix strings, remember this longest
- 掃描所有regular expression, 匹配則停止
- 如果沒(méi)有regular expression匹配怠堪,最長(zhǎng)前綴匹配的location將被使用
特例情況
- 如果最長(zhǎng)前綴location使用^~作為修飾符乌昔,則不再掃描正則表達(dá)式
- 如果prefix strings使用=作為修飾符,并且完成匹配尾组,則不再掃描其他location
場(chǎng)景舉例
簡(jiǎn)介: 這個(gè)是一個(gè)前后端分開部署的項(xiàng)目忙芒,前端是SPA,其中有些js靜態(tài)文件是來(lái)自后端讳侨,nginx需要分清楚哪些是后端路由呵萨,哪些是前端路由,哪些是靜態(tài)文件路徑跨跨。
- 靜態(tài)文件潮峦。BASE_PATH/static (前端打包后的js,css,images以及各個(gè)模塊的js文件,通過(guò)http://host/static/xxx訪問(wèn))
- 前端路由。包含一些請(qǐng)求路徑
- /template/edit/1
- taskflow/home/1/
- ...
- 后端路由勇婴〕类冢可窮舉
- /static/core/js/paas_api.js
- /jsi18n/gcloud/
- ...
upstream sops_server {
server sops:8000;
}
server {
listen 80;
server_name stage.xxx.com;
root /app/bk-sops/static/stage/dist/;
index index.html;
access_log /app/nginx_log/access.log;
error_log /app/nginx_log/error.log;
location / {
root /app/bk-sops/;
index index.html;
rewrite ^/.*$ /index.html break;
}
location /static/ {
root /app/bk-sops/;
}
location ~ (/static/core/js/paas_api.js|account/|jsi18n|api|core/api|config/api|apigw|common_template/api|template/api/|taskflow/api/|appmaker/|pipeline/|analysis/|periodictask/api/) {
proxy_pass http://sops_server;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
- 后端路徑可窮舉,在整個(gè)server block里面不使用精準(zhǔn)匹配和修飾符^~的情況下咆耿,正則表達(dá)式的優(yōu)先級(jí)最高德谅,因此第三個(gè)location列出所有后端路由
- 靜態(tài)文件使用第二個(gè)location,最長(zhǎng)prefix strings
- 其他的前端路由被重定向到index.html