nginx反向代理如何支持網(wǎng)址自動添加斜線
一、背景
我們在訪問nginx代理下的項目前端頁面時
當(dāng)請求URL后面沒有 /
nginx目錄中如果沒有對應(yīng)的文件
就會自動進(jìn)行 301 并加上 /
二、問題
通過lua+nginx進(jìn)行proxy_pass+upstream負(fù)載后,帶二級目錄的頁面訪問路徑出錯,無法解析。
例如訪問 https://xxx.com.cn/admin (未帶/ ) 時會跳轉(zhuǎn)至 http://safes-normal:8092/admin/ ,301后的地址出錯。
原有配置如下:
三、解決方案
第一步:解決重定向域名問題
在location處添加
proxy_set_header Host h o s t : host: host:proxy_port; proxy_set_header X-Forwarded-For $remote_addr;
例如
原因:
當(dāng)URL 指向一個目錄并且在最后沒有包含“/”時,Nginx 內(nèi)部會自動的做一個 301 重定向,由于我們的nginx中的server_name_in_redirect 值為 off ,故URL 重定向為: 原 URL 中的域名 + 目錄名 + /。
而我們沒設(shè)置proxy_set_header Host 時,瀏覽器直接訪問 nginx,獲取到的 Host 是 proxy_pass 后面的值,即 safes-normal。
故瀏覽器跳轉(zhuǎn)成了 http://safes-normal:8092/admin/。
當(dāng)我們設(shè)置了proxy_set_header Host h o s t : host: host:proxy_port后,再訪問 https://xxx.com.cn/admin ,此時會發(fā)現(xiàn)瀏覽器會301至https://xxx.com.cn:8092/admin/,這樣也會導(dǎo)致訪問失敗,因為我們希望得到的結(jié)果是:
https://xxx.com.cn/admin 重定向為 https://xxx.com.cn/admin/
第二步:解決重定向后的端口問題
查閱資料發(fā)現(xiàn)nginx中有 port_in_redirect 配置
如果port_in_redirect為off 時,那么始終按照默認(rèn)的端口;如果該指令打開,那么將會返回當(dāng)前正在監(jiān)聽的端口。
由于port_in_redirect默認(rèn)為on,所以導(dǎo)致我們重定向的時候,帶了server中的端口8092,如果希望nginx在301重定向時不帶端口,設(shè)置port_in_redirect為off 即可
修改配置:
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx配置參數(shù)中文說明詳解(負(fù)載均衡與反向代理)
最近在看高性能Linux服務(wù)器構(gòu)建實戰(zhàn)的Nginx章節(jié),對其nginx介紹的非常詳細(xì),現(xiàn)把經(jīng)常用到的Nginx配置參數(shù)中文說明摘錄和nginx做負(fù)載均衡的本人真實演示實例抄錄下來以便以后查看2020-03-03配置nginx訪問本地靜態(tài)資源,本地圖片,視頻教程
文章介紹了如何配置Nginx以訪問本地靜態(tài)資源、圖片和視頻,首先,進(jìn)入Nginx安裝目錄并打開`nginx.conf`文件,添加一個新的`server`配置來指定本地路徑,然后,通過命令行重啟Nginx服務(wù)以應(yīng)用更改,最后,通過瀏覽器訪問配置的圖片路徑來驗證配置是否成功2025-01-01詳解如何設(shè)置Nginx實現(xiàn)內(nèi)外網(wǎng)端口映射
在 Nginx 中實現(xiàn)內(nèi)外網(wǎng)端口映射是一種常見的做法,本文詳細(xì)介紹如何設(shè)置 Nginx 實現(xiàn)內(nèi)外網(wǎng)端口映射,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10