Jon*_*Kim 4 nginx proxy reverse-proxy redirect
我有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;
}
Run Code Online (Sandbox Code Playgroud)
如果我更改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
目标中使用尾部斜杠,则您甚至不需要指令,如文档中所述:
Run Code Online (Sandbox Code Playgroud)Syntax: proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement; Default: proxy_redirect default; Context: http, server, location
[...]
默认参数指定的默认替换使用 location 和 proxy_pass 指令的参数。因此,下面的两个配置是等效的:
Run Code Online (Sandbox Code Playgroud)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;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55840 次 |
最近记录: |