nginx代理添加servlet路径
Posted
技术标签:
【中文标题】nginx代理添加servlet路径【英文标题】:nginx proxy adding servlet path 【发布时间】:2012-06-17 12:35:12 【问题描述】:我有 Tomcat 6 在路径“be”上运行 Web 应用程序。 Spring Security 用于登录过程。登录网址为/console/login
,登录后重定向至/console/customer
。我对login
url 使用https,对customer
URL 使用http。我没有在任何 spring 配置文件中指定 servlet 路径。一切正常,访问/be/console/login
后收到正确的重定向(到/be/console/customer
)。
现在我想要一个代理。我将 nginx 配置为将 https://localhost
转发到 https://<someip>:9443
和 http 一样,从端口 80 转发到端口 9080。
问题是 Nginx 正在向浏览器返回无效的重定向。相反/be/console/customer
它返回/be/be/console/customer
。 Servlet 路径被添加到 URL 中两次。
第二个“是”怎么可能被删除?
谢谢。
Nginx 配置:
server
listen 443 ssl;
server_name localhost;
ssl on;
ssl_certificate C:\jc\\nginx\\tc\selfsigned.cer;
ssl_certificate_key C:\jc\\nginx\\tc\private.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /
proxy_redirect off;
proxy_pass https://<some ip>:9443;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location ~ /.+
proxy_redirect off;
proxy_pass https://<some ip>:9443;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
server
listen 80;
server_name localhost;
access_log logs/access.log;
error_log logs/error.log;
location /
proxy_redirect off;
#server_name_in_redirect off;
proxy_pass http://<some ip>:9080;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location ~ /.+
proxy_redirect off;
proxy_pass http://<some ip>:9080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
【问题讨论】:
【参考方案1】:此配置正在生产中工作:
location /demo/
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_request_headers on;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
【讨论】:
proxy_pass_request_headers 默认开启,其余(不同参数)只是与性能相关的配置。所以问题要复杂得多。以上是关于nginx代理添加servlet路径的主要内容,如果未能解决你的问题,请参考以下文章