Nginx 反向代理重定向

Nginx 反向代理重定向

我将其用作nginx反向代理,当我登录 Web 界面时,系统会将我重定向到代理 URL。我想避免这种情况,并始终将“server_name”保留为 URL。这可能吗?

这是我的/etc/nginx/conf.d/my_app.conf

server { 
    listen 443 ssl; 
    server_name my-app.net; 
    ssl_certificate /etc/pki/tls/certs/my-app.cer; 
    ssl_certificate_key /etc/pki/tls/private/my-app.key; 
    ssl_protocols TLSv1.1 TLSv1.2; 
    access_log /var/log/nginx/my-app.access.log main; 

    location / { 
        proxy_pass http://ip_of_the_app:7180/; 
        proxy_redirect off; 
    } 
} 

我连接上http://my-app.net,输入登录信息,然后我被重定向到http://ip_of_the_app:7180同一登录页面,我必须再次登录。可以避免这种双重登录吗?

答案1

不要设置proxy_redirectoff,那不是做你认为它正在做的事情。 proxy_redirect执行类似于 URL 重写的操作,例如:

location /sales/ { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_redirect http://ip_of_the_app:7180/ http://$host/sales/; 
}

这允许您将路径托管/sales/在其他地方。但即便如此,默认参数也可以proxy_redirect免费为您做到这一点。默认值是将位置重定向到中存在的任何位置(当您根本不设置或使用proxy_pass时,将使用默认参数)。proxy_redirectproxy_redirect default;

您无需设置proxy_redirect


您缺少的是需要发送到应用程序的标头。其中最重要的是HOST。这将根据需要执行代理,并在浏览器中保留正确的 URL。

location / { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_set_header HOST $host;
}

请注意,应用程序http://ip_of_the_app:7180/现在将接收带有标头的请求Host: my-app.net


您还应该考虑使用更多标头:

proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;

这将允许在应用程序内部更好地登录http://ip_of_the_app:7180/X-Forwarded-For给出实际客户端的 IP(而不是nginxIP)并X-Forwarded-Proto检查客户端是否nginx通过 HTTP 或 HTTPS 连接到。

相关内容