nginx转发给tomcat,POST数据丢失,又要修改浏览器路径,怎么破?

fhvsbgmy 2015-05-17 09:29:17
nginx转发请求给tomcat,因为某些原因,tomcat要保留ContextPath,也就是说,访问tomcat的时候是http://localhost:8080/Context32/。但是又不想在浏览器里体现出来,所以想到用nginx转发。但是不随人愿,配置成下面状态时,注意加粗和下划线的部分,打开后,如果用permanent,浏览器地址是正确的,但是无法post数据到tomcat,如果用last或者不加参数,浏览器地址不对,但是可以post数据到tomcat,怎么调整都没有达成二者都实现的方法,请教高手!

server {
listen 80;
server_name abcd.com *.abcd.com;
root /cdata/www/nginxwww/;
index index.php index.html index.htm;

#rewrite ^/Context32/(.*) /$1 permanent;
#rewrite ^/Context32 / permanent;

location / {
proxy_pass http://localhost:8080/Context32/;
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;
client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
...全文
8220 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LeeDEM0N 2016-07-02
  • 打赏
  • 举报
回复
请问下,我把war包放在tomcat的webapps里面发布,但是我工程里可能存在一些上传的东西, 替换了信的war包之后,之前版本的工程会自动删除掉,,请问下怎样发布工程才可以保留之前工程里面上传文件夹里的东西??
fbysss 2015-05-25
  • 打赏
  • 举报
回复
补充方案: if ($request_method != POST) { rewrite /xxx (.*)$ $1 permanent; } 因为post请求一般不会影响地址栏。 这样,就能满足地址栏优雅,且POST数据传递正常。 不过,这种情况主要用于快速解决遗留问题。如果是新规划系统,还是建议使用方案2。
fbysss 2015-05-24
  • 打赏
  • 举报
回复
这个问题,我也刚遇到,基本和你一致。这样的问题本应该很常见。但鲜有人讨论,更没有完美的解决方案。因为大家都能找到折中方案,就此打住,不愿追求极致。 建议解决办法: 核心思想:contextPath得为/。 1.Tomcat均在ROOT下部署 2..修改Jsp中的contextPath为绝对路径或者/。 实际上,方案2是最好的办法。因为这样可以跟contextPath完全解耦了,便于动静分离。文件改多一点就辛苦一下吧。 3.有人专门针对于此,编写了相应的模块,可以一试。 https://github.com/tszming/nginx-rewrite-request-body-module

1,092

社区成员

发帖
与我相关
我的任务
社区描述
云计算服务器、网络、虚拟化相关讨论
社区管理员
  • 服务器
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧