Nginx
使用 nginx 反向代理進行重定向
我有
a.b
域(例如)並想username.github.io/project
在a.b/c
. 這意味著我還想將我的瀏覽器 url 保留為a.b/c
並顯示username.github.io/project
.我在 nginx 模組中有以下設置
location /c { proxy_pass http://username.github.io/project; proxy_redirect http://username.github.io http://a.b; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; }
如果我更改
proxy_set_header Host $http_host
為proxy_set_header Host $proxy_host
or$host
,它只會重定向到http://username.github.io/project
我不打算這樣做的地方。我能怎麼做?
只需通過刪除該
proxy_set_header Host $http_host
行將正確的 Host 標頭髮送到您的代理目標。如果在您的伺服器塊中配置為伺服器名稱,那麼如果您在位置前綴和目標中使用斜杠,則您
a.b
甚至不需要指令,如文件中所述:proxy_redirect``proxy_pass
Syntax: proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement; Default: proxy_redirect default; Context: http, server, location
$$ … $$ 預設參數指定的預設替換使用 location 和 proxy_pass 指令的參數。因此,以下兩種配置是等價的:
location /one/ { proxy_pass http://upstream:port/two/; proxy_redirect default; } location /one/ { proxy_pass http://upstream:port/two/; proxy_redirect http://upstream:port/two/ /one/; }
$$ …. $$
所以,這應該這樣做:
server { server_name a.b; location /c/ { proxy_pass http://username.github.io/project/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; } }