tl;博士版
如何在不nginx
破坏? example.com
_tomcat
http://127.0.0.1:8080/blah/
pageContext
Tomcat 设置
存在一个tomcat 7 webapp,blah
部署了一个.war
文件并位于/var/lib/tomcat7/webapps/blah/
.
tomcat
在本地运行并可在http://127.0.0.1:8080
. 多个 webapps 正在运行,可以在以下位置访问:
http://127.0.0.1:8080/blah/
http://127.0.0.1:8080/foo/
http://127.0.0.1:8080/bar/
端口8080
被防火墙从外部阻止。
Nginx 设置
nginx
作为网守在服务器上运行。一个站点可以访问上面提到的所有本地 tomcat webapps。这适用于example.com
:
server {
listen 80;
server_name example.com;
root /var/lib/tomcat/webapps/ROOT/;
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_pass http://127.0.0.1:8080/;
}
}
问题:如何配置附加站点blah
直接访问?
在/etc/nginx/sites-enabled/
附加站点文件下设置路由http://blah.com
到http://127.0.0.1:8080/blah/
但存在问题。
server {
listen 80;
server_name blah.com *.blah.com;
root /var/lib/tomcat/webapps/blah/;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/blah/;
}
}
此设置为上下文路径添加了一个额外blah
的内容,创建了一个404
页面,因为路径/blah/blah/
不存在,这是有道理的。是否有一种简单的方法nginx
可以传递blah.com
给 webapp 根?
在 webapp 中,我使用${pageContext.request.contextPath}/path
webapp 资源的相对路径。我认为这是处理内部 tomcat 路径的正确方法,但这可能是问题的一部分吗?我相信这就是为什么我blah
在路线中获得额外的东西,创建404
页面。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="0; url=${pageContext.request.contextPath}/form">
<script type="text/javascript">
window.location.href = "${pageContext.request.contextPath}/form"
</script>
<title>Load BLAH</title>
</head>
<body>
<p>If you are not redirected automatically, follow this <a href="${pageContext.request.contextPath}/form">link</a>.</p>
</body>
</html>
此页面正常,但重定向到/blah/blah/form
而不是/blah/form
servlet 实际存在的位置。
我还尝试了其他方法,包括指向blah.com
tomcat 根本身。这在某种意义上是有效的,你可以blah
通过,blah.com/blah/
但这并不是我们真正想要的。
此外,仍然能够blah
通过example.com/blah/
.
显然,这是为nginx
新手准备的,但请帮助我(和未来的新手)解决这个问题,因为我无法找到明确的解决方案,并且nginx
文档也使用了帮助。