nginx 配置如下: (/login的请求:proxy_set_header Host $proxy_host 配置会报403)
server {
listen 8092;
server_name 192.168.2.x;
location /login {
proxy_pass https://flow.polar.com;
proxy_set_header X-ForwardeProto $scheme;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
}
}
nginx 使用以下方式配置是/login 是成功的,但是有点小问题
(/login的请求:proxy_set_header Host $http_host)
server {
listen 8092;
server_name 192.168.2.x;
location /login {
proxy_pass https://flow.polar.com;
proxy_set_header X-ForwardeProto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
}
小问题如图描述 虽然是200 状态,但是因为我配置的proxy_set_header Host $http_host;请求头还是,我本地的信息
不代理前的
不使用代理直接访问 nginx 要怎么配置,才能完成这个登录操作?我把配置成proxy_set_header Host $proxy_host; 会报403
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据你的描述,问题出在proxy_set_header Host
的配置上。当你设置为$proxy_host
时,由于这不是一个标准的Nginx变量,因此导致了403错误。而使用$http_host
虽然能成功代理请求,但Host头信息没有被正确地替换为目标服务器的主机名,而是保留了原始请求的Host信息。
要解决这个问题,你应该将proxy_set_header Host
配置为目标服务器的实际主机名,而不是使用$proxy_host
或保留本地的$http_host
。正确的做法是直接指定目标服务器的主机名,或者使用变量$host
(如果它是从客户端请求中继承过来的,并且你希望保持这种行为),但在大多数情况下,直接写目标URL的主机部分是最清晰和直接的。
修改配置如下:
server {
listen 8092;
server_name 192.168.2.x;
location /login {
proxy_pass https://flow.polar.com;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host flow.polar.com; # 直接指定目标主机名
proxy_set_header X-Real-IP $remote_addr;
}
}
这样配置后,当访问/login
时,Nginx会将请求转发到https://flow.polar.com
,并且在请求头中设置正确的Host: flow.polar.com
,从而避免了403错误,并确保请求被正确路由到目标服务器。