authbind,privbind或iptables REDIRECT(端口80到8080)?

我想在Linux(Debian)上以非特权用户的身份运行Glassfish v3,但在80端口上可用。我目前正在使用iptables:

iptables -t nat -I PREROUTING -p tcp -d xxxx --dport 80 -j REDIRECT --to-port 8080 

这工作,但我想知道:

  1. 如果与直接绑定到端口80相比,这会对性能产生显着影响
  2. 如果我可以做一个类似的设置也适用于HTTPS(或者如果它必须在443上运行)
  3. 如果有办法避免其他用户绑定到端口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