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错误,并确保请求被正确路由到目标服务器。