Apache mod_proxy (Forward/Reverse)
為了物盡其用,我們總是在一台機器上架設很多網路服務,而這些服務通常都四散在各個 Port 上,例如在 80 上有 Apache HTTPd、Tomcat 占用著 8080、RStudio Server 又裝在 8787 上,用起來十分不方便。
問題
如何將不同 Port 上的服務整合到同一個 Port 上?
舉例來說,我在 CentOS 7 上安裝了一套 RStudio Server,這是一款網頁式的 R 語言 IDE,該服務預設的 Port 是 8787,而我的 Port 80 上也已經在跑 WordPress 等服務,但是我希望能夠在不改 Port 的情況下用 URL 來區別兩個服務,像是用 http://marklee.tw/rstudio
可以連到 RStuidio Server,而不會影響到本來就正常運行的http://marklee.tw/wordpress
。
基礎知識
容我發懶一下,TonyQ 大大已經很好心地把文件翻譯出來,請看[心得] apache mod_proxy 介紹。
解決方法
基本上,CentOS 7 的 Apache 已經內建安裝了 mod_proxy,可以在 /etc/httpd/conf/httpd.conf
或/etc/httpd/conf.modules.d/
內找到,如果沒有,那可能需要安裝或啟用,請自行估狗。
首先,執行以下指令找找看是否有 <IfModule mod_proxy.c>
的標籤,如果有,請把標籤的內容反註解掉。
1 | vi /etc/httpd/conf/httpd.conf |
如果沒有相關的內容,請在文件結尾加入以下內容:
1 | <IfModule mod_proxy.c> |
1 | systemctl restart httpd.service |
然後連進網址 http://ip-address/rstudio
看看有沒有通,如果出現 503 Error (Service Unavailable)
請不要驚慌,可能是 SELinux 在搞鬼,可參考Apache ProxyPass 出现 503 Service Temporarily Unavailable 的解决方案。