我有两个网站运行在两个tomcat服务器上(独立的机器或LAN IP)。这是我的nginx配置:
server { # simple reverse-proxy
listen 80;
server_name server1.com www.server1.com;
# pass requests for dynamic content to rails/turbogears/zope, et al
location / {
proxy_pass http://192.168.1.141:8080;
}
}
server { # simple reverse-proxy
listen 80;
server_name server2.com www.server2.com;
# pass requests for dynamic content to rails/turbogears/zope, et al
location / {
proxy_pass http://192.168.1.129:8080;
}
}
Nginx运行在与server1的IP(192.168.1.141)相同的硬件上。除了当我转到server1上的某个页面时,该页面(以及随后的页面)上的所有相对URL都变为http://192.168.1.141:8080/blah
,而不是http://www.server1.com/blah.有许多页面可以正常工作,并使用www.server1.com和默认端口(80)维护主机/端口。我找不到为什么有些页面可以工作,而另一些页面则更改主机和端口。如有任何帮助,我们将不胜感激。
谢谢!
我会在代理块中添加这一行
proxy_set_header Host $http_host;
这将使后端服务器检测外部主机,而不是内部IP。
编辑
<base>
标签为页面中的所有相对链接提供了一个基础,就像我的页面托管在foo.com
上,我放置了一个base = bar.com
,例如一个类似的url
<a href = '/some/random/uri'>click me</a>
通常情况下,它应该指向http://foo.com/some/random/uri
,但基地会将其指向bar.com/some/random/uri
这就是为什么使用base的页面可以工作的原因。
原来我的Tomcat版本是6.0。在后来的版本中引入了用于通过真实ip的阀门。在获得6.0.37之后,它现在运行良好。
在Tomcat server.xml文件中,在Engine块中添加以下内容。
<!--pass remote IP into the log-->
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
protocolHeader="x-forwarded-proto"
protocolHeaderHttpsValue="https" />
In nginx.conf:
location / {
proxy_pass http://saturn.com:81;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}