引言
這兩天寫項目碰到了使用nginx作為圖片服務器及簡單的地址重寫
Nginx作為圖片服務器
server {
listen 80;
server_name image.leyou.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
root D:\\apple\\images;
}
}
域名這里使用的是本機解析的DNS
配置方式:域名在本機系統盤/Windows/System32/dirvers/etc下的hosts修改,可以配置本地靜態DNS服務
瀏覽器默認請求發送端口為80
server_name的域名請求的鏈接,文件資源路徑在本地的路徑下尋找
地址重寫
server {
listen 80;
server_name api.leyou.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location /api/upload {
proxy_pass http://127.0.0.1:8092;
proxy_connect_timeout 600;
proxy_read_timeout 600;
rewrite "^/api/(.*)$" /$1 break;
}
location / {
proxy_pass http://127.0.0.1:10010;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
任何發往server_name域名的請求都會被下面兩個location過濾
(重要)順序:/api/upload/ ---> /
這里的順序不能顛倒,先寫全局的那么有限制的將不起作用
項目中后端接口鏈接為/upload/xxx,所以需要將/api過濾掉,同時將后面的轉發至對應服務
rewrite [正則表達式] [真實鏈接替代位] [功能位]
(重要)代碼中正則表達式指/api后面的所有部分(即 .*)被代指為$1,如果有多個(xxx)篩選條件,則$后面的數字還可以向后追加
$1 代指匹配正則中的(.*),即將/api后面的全部看作一個區塊,區塊名為$1,可以起到替代作用
break 是功能位中的一個
last #本條規則匹配完成后,繼續向下匹配新的location URI規則
break #本條規則匹配完成即終止,不再匹配后面的任何規則
redirect #返回302臨時重定向,瀏覽器地址會顯示跳轉后的URL地址
permanent #返回301永久重定向,瀏覽器地址欄會顯示跳轉后的URL地址
異常
后端接口正常測試,前端URL爭取,但前端請求無法到達,服務沒有任何相應,一定要往跨域問題哪里找答案,這里涉及了跨域問題
參考:我的文章-> 深入淺出跨域問題
功能演示