我运行 Tomcat,并使用 Nginx 作为负载均衡器。为了保持所有重定向等的一致性,我还在 Eclipse 前面运行它。
如果您尝试配置多个虚拟主机,Eclipse 中的 Tomcat 似乎会失败。因此,我需要将每个应用程序配置为从 Eclipse 中的不同 URL 运行。例如server.xml
:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Context docBase="app1" path="/" reloadable="true" source="org.eclipse.jst.jee.server:app1"/>
<Context docBase="app2" path="/app2" reloadable="true" source="org.eclipse.jst.jee.server:app2"/>
</Host>
问题是当我代理它时,我无法让它使用子文件夹中的代码app2
。它从根目录提供服务。而且我似乎也无法通过重写来修复它...
Nginx 配置有...
location ~ \.(do|jsp)$ {
#rewrite ^(.*) $1 break;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
我想要做的是:
proxy_pass http://127.0.0.1:8080/app2;
但这似乎是不允许的。
我知道如何使用服务器来配置它。但 Eclipse 似乎只能与单个虚拟主机配合使用。所以我只能使用文件夹...
我错过了什么?
答案1
你读过文档?
Syntax: proxy_pass URL; Default: — Context: location, if in location, limit_except
设置代理服务器的协议和地址以及位置应映射到的可选 URI。作为协议,可以指定“http”或“https”。地址可以指定为域名或 IP 地址,以及可选端口:
proxy_pass http://localhost:8000/uri/;
[...]
在某些情况下,无法确定要替换的请求 URI 的部分:
使用正则表达式指定位置时。在这种情况下,应该指定不带 URI 的指令。
使用重写指令在代理位置内更改 URI 时,并且相同的配置将用于处理请求(中断):
location /name/ { rewrite /name/([^/]+) /users?name=$1 break; proxy_pass http://127.0.0.1; }
在这种情况下,指令中指定的 URI 将被忽略,并且完整更改的请求 URI 将传递给服务器。
[...]