我想在Linux(Debian)上以非特权用户的身份运行Glassfish v3,但在80端口上可用。我目前正在使用iptables:
iptables -t nat -I PREROUTING -p tcp -d xxxx --dport 80 -j REDIRECT --to-port 8080
这工作,但我想知道:
…或者如果我应该使用authbind / privbind来代替? 问题:到目前为止,我无法使用authbind或privbind。
对于authbind ,我编辑了asadmin的最后一行:
exec authbind --deep "$JAVA" -Djava.net.preferIPv4Stack=true -jar ...
对于privbind :
exec privbind -u glassfish "$JAVA" -Djava.net.preferIPv4Stack=true -jar ...
(仅)使用这些设置,我可以成功执行一个create-domain --domainport 80 。 这certificateauthbind和privbind实际上是工作的(脚本的authbind版本是由glassfish用户调用的; privbind版本当然是由root调用的) 。 但是,在这两种情况下,我在启动域( start-domain )时遇到以下exception:
[#|2010-03-20T13:25:21.925+0100|SEVERE|glassfishv3.0|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=11;_ThreadName=FelixStartLevel;|Shutting down v3 due to startup exception : Permission denied: 80=com.sun.enterprise.v3.services.impl.monitor.MonitorableSelectorHandler@1fc25e5|#]
我还没有find解决scheme(searchnetworking后,似乎这不是那么容易?)但是,也许,iptables的解决scheme是足够好的 – 你怎么看?
谢谢,
克里斯
注意:
把Apache放在前面对我来说不是一个好的解决scheme – 我计划使用Comet,Comet可以在没有代理的情况下更好地工作。
我一直在生产中使用NAT。 虽然它更常用于在Intranet和Internet之间进行转换,但也可以使用这种方式来完全接受。 我做了类似的情况几乎相同的情况。 这样说,还有其他的select。
应用程序服务器和Web服务器经常一起运行,因此在内部保持Java在8080和8443上是有意义的。 更常见的情况是,人们可能会使用Apache作为代理来将某些请求转换为Java,并从Apache实例提供静态内容。 我明白,你觉得这个解决scheme是不能接受的,但必须说。
如果这不包括你的问题,请随时阐述,我会进一步迭代。
编辑1
别客气。 NAT不会影响https的正常运行,它会正常工作。
我无法想象为什么你会担心其他非特权用户绑定到8080.有什么独特的你的情况?
您的privbind问题可能是HOME设置为root的结果。 无论是我还是谁将从我身上获得privbind的所有权,都会尝试在下一个版本中解决它(现在会有下一个版本…)
看看是否在命令行开头添加“HOME =〜glassfish”(假设伯恩派生的shell)解决了这个问题(如果问题依然存在:毕竟问题已经有四年了)
Shachar