ton*_*o94 16 linux nginx reverse-proxy
我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;
}
}
Run Code Online (Sandbox Code Playgroud)
我连接http://my-app.net,输入登录信息,然后我被重定向到http://ip_of_the_app:7180同一个登录页面,我必须再次登录。可以避免这种双重登录吗?
gro*_*mal 30
不要设置proxy_redirect为off,这不是在做您认为正在做的事情。 proxy_redirect执行类似于 URL 重写的操作,例如:
location /sales/ {
proxy_pass http://ip_of_the_app:7180/;
proxy_redirect http://ip_of_the_app:7180/ http://$host/sales/;
}
Run Code Online (Sandbox Code Playgroud)
这允许您在/sales/其他地方托管路径。但即便如此, 的默认参数proxy_redirect也可以免费为您做到这一点。默认值是将位置重定向到任何存在的位置proxy_pass(并且在您根本不设置proxy_redirect或使用时使用默认参数proxy_redirect default;)。
您不需要设置proxy_redirect.
您缺少的是需要发送到应用程序的标头。其中最重要的是HOST。这将根据需要执行代理并在浏览器中保留正确的 URL。
location / {
proxy_pass http://ip_of_the_app:7180/;
proxy_set_header HOST $host;
}
Run Code Online (Sandbox Code Playgroud)
请注意,应用程序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;
Run Code Online (Sandbox Code Playgroud)
这将允许在http://ip_of_the_app:7180/. X-Forwarded-For给出实际客户端的 IP(而不是nginxs IP)并X-Forwarded-Proto检查客户端是否nginx通过 HTTP 或 HTTPS连接到。
| 归档时间: |
|
| 查看次数: |
100193 次 |
| 最近记录: |