因此,我有一个nginx向rails服务器进行反向代理。rails服务器有一个oauth登录名,它的库使用‘X转发-主机’构建回调URL。问题是,当nginx侦听80以外的端口时,回调URL没有被正确格式化。在查看配置时,我意识到这是因为它从‘X转发主机’构建了URL,而我使用的配置没有包含其中的端口。我已将我的配置修改为:
server {
listen 8081;
server_name app;
location / {
proxy_pass http://app;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host:8081;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}我的问题是,“X转发-主机”实际上定义为什么?nginx将'Http- host‘作为主机+端口,但我在网络周围发现,有时X转发主机只将主机视为主机,似乎有一个名为’X转发-端口‘的变量有时会被使用,但我无法在Nginx文档中找到关于它的任何内容,只是在名为'proxy- port’的日志中有一个可打印的变量,但这是被转发到的端口,而不是它接受连接的端口(对我来说,这不是什么,因为我使用的是unix套接字)。正确的解决办法是什么?Nginx不允许我手动使用X转发端口头,我甚至不确定我是否应该。环顾整个网络,其他http服务器似乎对此有不同的处理方式,例如:
一些相关链接:
发布于 2020-04-25 18:19:10
我只是有个类似的问题。我认为一个常见的方法是指定X-Forwarded-Host头中的端口,正如Daniel在他的回答中所建议的那样。
我还看到,有时使用“非官方”X-Forwarded-Port头。
我创建了一个similar question,在这里我总结了我认为服务器应该如何运行--所有可能的组合(也可以使用X-Forwarded-Proto,我认为它也会产生影响)。
发布于 2014-01-18 02:43:29
服务器"app“在端口8081上有nginx,在80上有rails。
这会将所有请求映射到http://app:80,并将响应头“位置”从http://app:80更改为http://app:8081。
server {
listen 8081;
server_name app;
location / {
proxy_pass http://app:80;
proxy_redirect http://app/ http://app:8081/;
proxy_redirect http://app:80/ http://app:8081/;
}
}https://stackoverflow.com/questions/21195220
复制相似问题