nginx反向代理“IP地址显示”

Posted

技术标签:

【中文标题】nginx反向代理“IP地址显示”【英文标题】:nginx reverse proxy "ip address shows" 【发布时间】:2015-09-11 14:42:56 【问题描述】:

我有 nginx 在我的服务器上为 example.com 网站提供服务。同一台服务器正在运行服务于http://server_ip:8080/app webapp 的tomcat 安装(这是一个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; 就是这样!非常感谢。愿意将您的评论放在答案中,以便我为您投票吗? 【参考方案1】:

你错过了

proxy_set_header Host $host;

实际上,我认为没有任何理由拥有 X-Forwarded-HostX-Forwarded-Server 标头。

【讨论】:

好的,谢谢,我承认这两个在那里,因为我在网上找到的例子有:-P。我将深入研究文档以了解它们的作用(如果不需要,则将其删除)。

以上是关于nginx反向代理“IP地址显示”的主要内容,如果未能解决你的问题,请参考以下文章

nginx怎么反向代理asp页面

用nginx反向代理的问题?(详内)

Nginx简单粗暴的反向代理教程

nginx反向代理数据传输能提高数据响应么?

Nginx 最全操作——nginx反向代理(5)

Nginx 如何设置反向代理