![在 Ubuntu 14.04.4 LTS 上配置 Wildfly 10.0.0 Final 以监听端口 80 的首选方法是什么?](https://linux22.com/image/686990/%E5%9C%A8%20Ubuntu%2014.04.4%20LTS%20%E4%B8%8A%E9%85%8D%E7%BD%AE%20Wildfly%2010.0.0%20Final%20%E4%BB%A5%E7%9B%91%E5%90%AC%E7%AB%AF%E5%8F%A3%2080%20%E7%9A%84%E9%A6%96%E9%80%89%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我使用这个在 Ubuntu 14.04.4 LTS 上安装了 Wildfly 10.0.0 Final脚本。
一切看上去都很好。
我的问题是 wildfly 监听端口 28080(脚本安装默认端口),我可以通过更新 standalone.xml 将其更改为 8080。但我希望 wildfly 监听端口 80,但将 standalone.xml 更改为使用端口 80 不起作用。
看起来只有 root 可以监听低于 1024 的端口,所以问题是,在 Ubuntu 服务器上配置 Wildfly 监听端口 80 的首选方法是什么?
我尝试过使用 nginx 并且可以工作,但奇怪的是,某些文件(例如 jboss 默认主页的 css)无法找到。
答案1
JBoss wiki 上开发者网站列出了一个相当全面的选项列表,这些选项可能也适用于 Wildfly;本质上是以下变体:
- 将应用程序服务器保持在非特权端口上,并使用在特权端口上监听的程序将请求转发到该端口:
- 即反向代理或负载均衡器
- 即配置端口转发
这两个似乎是最常见的选择,而且很受欢迎。
替代方案有:
- 以 root 身份启动应用程序服务器,绑定到特权端口(其实并不安全,而且是个坏主意TM)
- 以 root 身份启动应用程序服务器以绑定到特权端口,然后放弃特权并以非特权普通用户身份运行,对此我还没有找到文档支持。
最后也是最重要的一点,我个人最喜欢的是:
使用
setcap
允许 Java 二进制文件本身能力绑定到特权端口,而无需以root
:sudo setcap 'cap_net_bind_service=+ep' /path/to/jre/bin/java
唯一的缺点是这样做有点不明显,但你的应用程序也没有任何外部依赖。
答案2
是的,在我看来,Nginx
在 wildfly 前面设置一个反向代理是首选方法。有一个部署指南在 Nginx 主页上了解如何配置。
答案3
通过端口 80“访问”部署在 WildFly 上的应用程序的推荐方法之一是使用充当反向代理的 Apache HTTP 服务器:
A)mod_proxy如果您没有系统管理员经验,这是最简单的方法,您可以在 WildFly 上使用 HTTP (mod_proxy_http) 或 AJP (mod_proxy_ajp)。对于负载均衡器场景,您也可以使用 mod_proxy_balancer。
b)mod_jk配置和 AJP 稍微复杂一些,由于 Apache 2.2+ 附带了 mod_proxy_ajp,所以一般不需要。
C)mod_cluster,更复杂,但具有适用于负载平衡场景的很酷的功能,它在后台使用 mod_proxy。
您可以使用许多其他反向代理,例如nginx或者哈普罗西如果你希望。
另一种方法是使用 iptables 端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
WildFly 的开发人员建议使用类似的工具,因为 Undertow 的速度确实很快。