2009年8月8日

Tomcat 與 Port 80

在 Linux 環境下除了 root 使用者外是無法開啟低於 1024 以下的通信埠,當然 Tomcat/Jakarta 預設的使用者 tomcat 也不例外,所以 Tomcat/Jakarta 預設的 HTTP 服務埠號是指定在 8080 上的。

Port 8080 意謂著訪客必須特地修正瀏覽器網址列上的資訊,但這即不便民也與網路習慣不符,所以網站系統管理員必須設法修正 Tomcat/Jakarta 的這個設定。

過去由於心臟比較肥大(心室肥大症?)的關係,個人是直接改用 root 去啟動 HTTP 服務。這麼危險的舉動雖然目前看來並沒有啥意外,但或許這只是無知之人所獨自擁有的小小幸福,搞不好硬碟中深藏已久的性感睡姿照早就被幹走而不自知。總之,這其實是個簡單卻危險且不便的解決方式。何以不便?每次進行 Tomcat 小改版時總是會被套件管理系統提示需修復啟動檔的附帶效應就是每次升版時都需小心翼翼以免阻卻了 Tomcat 的執行。

比較正規的方式是利用 Port Redirect 的方式將來自 Port 80 的連線需求重新導到實際提供服務的 Port 8080 上,這又有兩種作法:

  1. 利用 iptables :網路防火牆本來就可以進行這類動作
  2. 使用 xinetd :超級服務管理員原始的目的就是作為所有服務的代理窗口
因為第一項設定試了半天一直無法成功,所以此處只介紹第二項設定。
  1. 請安裝 xinetd 這個 super daemon 套件,它會在 /etc/xinetd.d/ 內塞進一堆設定檔,但是我們用不到。
  2. 編輯 /etc/xinetd.conf 檔,將 only_from 這個設定給註銷掉。
  3. 在 /etc/xinetd.d 目錄中放置以下設定檔後啟動 xinetd 服務即可。
  4. xinetd 啟用後應可在 netstat 中看到 port 80 已被開啟且由 xinetd 提供服務,如附圖。
# vim /etc/xinetd.d/tomcat
# Redirects any requests on port 80 to port 8080 (where Tomcat is listening)
service http
{
        disable                 = no
        flags                   = REUSE
        wait                    = no
        user                    = root
        socket_type         	= stream
        protocol                = tcp
        port                    = 80
        redirect                = localhost 8080
        log_on_success  -= PID HOST DURATION EXIT

# per_source = UNLIMITED # instances = UNLIMITED }

iptables 的作法等我研究出來後再看看… XD

※ 2009-08-10 補充

  • 此法會導致 Tomcat 無法捉到正確的 Client IP … -.-
  • 另外,下一篇文章開始將改用 Blogger.com 發佈,資料移轉問題目前暫時還沒有辦法… XD