2013-06-26 219 views
4

我最近在Amazon ec2上安裝了Tomcat 7。我發現默認情況下,Tomcat監聽端口8080.Apache httpd與Tomcat 7:端口80與端口8080

互聯網上的文檔提倡這是因爲linux更好地將較低端口保存到超級用戶。 (ec2 btw上的解決方案是創建一個負載平衡器 - 將目標機器上的端口80與8080之間的通信導向)

比 - 讓我吃驚 - 我繼續在另一臺機器上安裝Apache服務器(yum install httpd)和驚喜! - 默認情況下,Apache在端口80上偵聽!

這很尷尬,我認爲......現在'8080港口'倡導者在哪裏?

任何人都可以請解釋概念上的差異?

感謝

+0

你可以完美地將80用於tomcat,但它通常保存在Apache httpd服務器上。 –

+0

*問題是什麼?*您不理解80和8080之間的「概念區別」?你很驚訝HTTP服務器在端口80上偵聽?你很驚訝Tomcat聽詩人8080?你認爲應該有一批「港口8080倡導者」? – EJP

回答

6

所不同的是在這一點主要是歷史,但Linux和我能想到的最Unix實現仍執行。 Unix/Linux認爲任何端口號< 1024都是「特權」,並且需要root權限才能綁定到它們。任何用戶都應該能夠綁定到高於1024的端口。如果您的軟件包具有一定的復古性,它將以root身份啓動,綁定到端口,並且可以選擇將有效的UID更改爲非特權用戶。 Apache HTTPD屬於這個類別。之後創建的軟件包(例如Apache Tomcat)通常採用非特權用戶的方式處理所有事情,並默認綁定到更高的端口號。

某些防火牆管理員可以,我敢肯定,在某些情況下,可以詳細瞭解端口< 1024有時會在防火牆配置中得到特殊處理。

1

我繼續說明。因爲@gunglefunk已經有了answare,所以httpd使用80端口,因爲它運行的是主守護進程,直到root /特權用戶,即允許綁定小於1024的任何端口。所有其他線程或工作者運行非特權用戶(主要是apache )。

Tomcat可以使用相同的原理。 Tomcat完全是用Java編寫的,所以只有一個用戶可以運行整個JVM。它通常是用戶'tomcat'。

當您想在端口80上監聽Tomcat時,您有兩種可能性。

在'root'下運行tomcat(在tomcat.conf或catalina.sh中更改它)。但是,由於安全原因,不建議使用它。

在標準用戶(通常爲tomcat)下的任何高於1024的端口上運行tomcat並使用proxy_ajp協議。這意味着您還可以在端口80上運行Apache HTTPD服務器並將流量轉發到tomcat端口(默認值爲8080上的http,8443上的https,8009上的ajp)。見https://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.htmlhttp://tomcat.apache.org/connectors-doc/ajp/ajpv13a.htmlhttp://tomcat.apache.org/connectors-doc-archive/jk2/proxy.html

0

你並不需要運行一個過程根將其綁定到一個特權端口。

您可以使用setcap給它這個權限:

https://wiki.apache.org/httpd/NonRootPortBinding

這是不是真的有必要,但。

例如,您可以簡單地使用iptables轉發到更高端口。

還有一些工具,如authbind,是爲此目的而設計的。

此外,如果安全問題,您也可以在chroot jail中運行該進程。