2015-06-25 175 views
0

我有nginx服務我的服務器上的example.com網站。同一臺服務器正在運行一個tomcat安裝,服務於http://server_ip:8080/app webapp(這是一個Spring Security安全的Spring MVC web應用程序)。nginx反向代理「ip地址顯示」

我希望能夠使用http://app.example.com地址訪問tomcat webapp。我所做的是Nginx的配置爲如下(app.example.com配置文件中sites-enabled下)的反向代理:

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> 

使Tomcat是默認送我到app web應用程序,當我訪問http://server_ip:8080(該app web應用程序是它無論如何服務的唯一的事情)。

現在,如果我訪問http://app.example.com,我將獲得app Web應用程序的登錄頁面;但是,登錄後,瀏覽器的URL字段顯示http://server_ip:8080而不是http://app.example.com,如我所料。

任何人都有一個什麼是造成這一點的暗示?我在網上找到的所有指南都似乎暗示了我擁有的配置。如果有人可以確認配置是否正常,我會很喜歡,因爲這可能指向服務器配置以外的原因(可能與spring安全性在登錄後重定向的方式有關)。

謝謝。

+0

您錯過了'proxy_set_header Host $ host;' –

+0

就是這樣!非常感謝。謹慎地將您的評論置於答案中,以便我可以對你進行評估? – timber

回答

0

你錯過了

proxy_set_header Host $host; 

而實際上,我看不出有任何理由,X-Forwarded-HostX-Forwarded-Server頭。

+0

好的,謝謝,我承認這兩個在那裏,因爲我在網上找到的例子有他們:-P。我會在文檔中更深入地瞭解他們的工作(如果不需要,請將其刪除)。 – timber