spring-mvc - nginx 反向代理 "ip address shows"

标签 spring-mvc tomcat nginx spring-security reverse-proxy

我的服务器上有 nginx 服务于 example.com 网站。同一台服务器正在运行一个 tomcat 安装,服务于 http://server_ip:8080/app webapp(这是一个 spring MVC webapp,由 Spring Security 保护)。

我希望能够使用 http://app.example.com 地址访问 tomcat webapp。我所做的是将 nginx 配置为反向代理,如下所示(在 sites-enabled 下的 app.example.com 配置文件中):

server {
  listen          80;
  server_name     app.example.com;
  root            /var/lib/tomcat7/webapps/app;


  location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://server_ip:8080/;
  }
}

其中 server_ip 是我的服务器的 IPv4 地址。

此外,在 /etc/tomcat7/server.xml 文件中我添加了:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="app">
         <WatchedResource>WEB-INF/web.xml</WatchedResource>
     </Context>
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

因此,当我访问 http://server_ip:8080 时,tomcat 默认将我发送到 app webapp(app webapp这是它唯一提供的服务)。

现在,如果我访问 http://app.example.com,我会得到 app webapp 的登录页面;但是,登录后,浏览器的 URL 字段显示 http://server_ip:8080 而不是 http://app.example.com,就像我想的那样预计。

有人知道是什么原因造成的吗?我在网上找到的所有指南似乎都建议使用与我拥有的配置类似的配置。如果有人可以确认配置是否正常,我会很高兴,因为这可能指向服务器配置以外的原因(可能与登录后 spring security 重定向的方式有关)。

谢谢。

最佳答案

你错过了

proxy_set_header Host $host;

实际上,我看不出有任何理由需要 X-Forwarded-HostX-Forwarded-Server header 。

关于spring-mvc - nginx 反向代理 "ip address shows",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31042778/

相关文章:

java - 如何在生产中部署 H2O flow pojo 文件

java - 使用 knockout.js 和 Spring MVC/JSP 的初始状态

Spring 安全性,启用 Oauth2 时出现 cors 错误

java - 如何在端口 8080 上运行时发布 tomcat webapp?

java - 在 REST Controller 中使用 AtomicLong

tomcat - 增加tomcat保持事件超时

java - tomcat请求的资源()不可用

php - 我对 Memcache、Memcached 和 php5-memcache 感到困惑

java - 使用 nginx 服务器作为 glassfish 服务器的代理来加载静态内容

ssl - CA 签名的 SSL 证书不受信任,声称是自签名的