我目前正在尝试使用 Tomcat 设置我的第一个 V-Server(CentOS 7)来运行 Web 应用程序。
现在一切都正常了,但我还面临一个阻止我发布它的最后一个问题:
我只能通过访问我的 Tomcat WebApp,exampledomain.com:8080/WebAppName/
但我希望它只是exampledomain.com/WebAppName/
。
几个小时后(确切地说是 20 个小时),我还没有想出解决方案,但让用户一直打字8080
对我来说不是一个选择。
如果有人能给我提供解决方案或建议我会非常高兴。
提前致谢!
答案1
您应该在 Tomcat 前面添加一个反向代理。并且您应该将 Tomcat 更改为仅监听 127.0.0.1 或在防火墙中关闭对端口 8080 的访问。
您可以使用的两个软件示例是 Apache 和 nginx。使用 Apache,您可以按如下方式使用 ProxyPass 和 ProxyPassReverse:
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
使用 nginx 的话
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8080;
}
答案2
为了完整起见,在大多数系统上,您可以直接在端口上运行 Tomcat 80
(几乎无特权用户)。 它所需的唯一权限是CAP_NET_BIND_SERVICE
能力。
这可以通过两种方式实现:
[这需要系统Dv229 或更高版本,因此不包括 Centos 7] 通过询问系统D运行具有此功能的 Tomcat:
systemctl edit --full tomcat.service
并添加:
AmbientCapabilities=CAP_NET_BIND_SERVICE
到该[Service]
部分。
- 通过运行 Tomcat授权绑定(参见这篇博文),它允许进一步限制功能
CAP_NET_BIND_SERVICE
:例如,您可以将 Tomcat 配置为仅能够绑定端口80
。