我使用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,我必须再次登录.可以避免双重登录吗?
解决方法:
不要将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/;
}
这允许您在其他地方托管/ sales / path.但即便如此,proxy_redirect的默认参数也是免费的.默认设置是将位置重定向到proxy_pass中存在的任何内容(当您根本没有设置proxy_redirect时使用默认参数,或使用proxy_redirect默认值;).
您不需要设置proxy_redirect.
你缺少的是需要发送到应用程序的标题.其中最重要的是主持人.这将根据需要执行代理,并在浏览器中保留正确的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-用于提供实际客户端的IP(与Nginxs IP相反)和X-Forwarded-Proto,以检查客户端是通过HTTP还是HTTPS连接到Nginx.