Glassfish

authbind、privbind 或 iptables REDIRECT(埠 80 到 8080)?

  • September 27, 2014

我想在 Linux (Debian) 上以非特權使用者身份執行 Glassfish v3,但使其在埠 80 上可用。我目前正在使用 iptables 執行此操作:

iptables -t nat -I PREROUTING -p tcp -d x.x.x.x --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 ...

對於私人活頁夾

exec privbind -u glassfish "$JAVA" -Djava.net.preferIPv4Stack=true -jar ...

(僅)通過這些設置,我可以成功執行create-domain --domainport 80. 這證明,authbind 和 privbind 確實有效*(腳本的 authbind 版本由 glassfish 使用者呼叫;privbind 版本當然由 root 呼叫)*。但是,在這兩種情況下,在啟動域 ( ) 時,我都會遇到以下異常start-domain

[#|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|#]

我還沒有找到解決方案(在網上搜尋之後,這似乎不是那麼容易?)但也許,使用 iptables 的解決方案已經足夠好了 - 你覺得呢?

謝謝,

克里斯

筆記:

在我的情況下,將 Apache 放在前面並不是一個好的解決方案——我計劃使用 Comet,而 Comet 在沒有代理的情況下工作得更好。

我在生產中一直使用 NAT。雖然它更常用於在 Intranet 和 Internet 之間進行轉換,但以這種方式使用它也是完全可以接受的。對於幾乎相同的情況,我做了類似的事情。話雖如此,還有其他選擇。

應用程序伺服器和 Web 伺服器經常一起執行,因此在內部將 Java 保留在 8080 和 8443 上是有意義的。更常見的是,人們可能會使用 Apache 作為代理將某些請求轉換為 Java 並提供來自 Apache 實例的靜態內容。我了解您認為此解決方案對您來說是不可接受的,但必須說。

如果這不能涵蓋您的問題,請隨時闡述,我將進一步迭代。

編輯 1

不客氣。NAT 不會影響 https 的正常執行,它可以正常工作。

我無法想像您為什麼會擔心其他非特權使用者綁定到 8080。您的情況有什麼獨特之處嗎?

引用自:https://serverfault.com/questions/124537