我有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 "%r" %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安全性在登录后重定向的方式有关)。
谢谢。
您错过了'proxy_set_header Host $ host;' –
就是这样!非常感谢。谨慎地将您的评论置于答案中,以便我可以对你进行评估? – timber