在 OS X Server 設定 reverse proxy
最近在 Mac mini 上安裝了 SCM-Manager 來做為 source code 的管理,可是因為 Mac mini 上已經有 web server 了,為了避開衝突,scm-server 就使用 port 8080,而在 web server 上再設定 reverse proxy 到 scm-server。
從 OS X 的管理介面並沒有可以設定 reverse proxy 的地方,不過在進階設定有個網路 App 的部份,看起來似乎是可以自訂一些特殊功能的地方。
看了 Apple 網站上關於 web application 的說明,竟然只是簡單帶過,要自己去看 man webappctl 以及 /Library/Server/Web/Config/apache2/webapps/ 目錄內的範例。
在看了範例後才發現要做 reverse proxy 意外的簡單,因為我的需求只要寫個 .plist 檔案就可以做到了,不需要其他的輔助檔案了。
我寫了 org.scm-manager.webapp.proxy.plist,內容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!-- See man pages for webapp.plist(5) and webappctl(8) for information about this example webapp.plist --> <plist version="1.0"> <dict> <key>launchKeys</key> <array> <!-- Launchd plists in /System/Library/LaunchDaemons are loaded when webapp is started --> <!-- <string>homebrew.mxcl.scm-manager</string> --> </array> <key>name</key> <string>org.scm-manager.webapp.proxy</string> <key>displayName</key> <!-- Name shown in Server app --> <string>Proxy to SCM-Manager</string> <key>proxies</key> <dict> <key>/scm</key> <dict> <key>path</key> <string>/scm</string> <key>urls</key> <array> <string>http://127.0.0.1:8080/scm</string> </array> </dict> </dict> <key>requiredModuleNames</key> <array> <string>proxy_module</string> </array> <key>requiredWebAppNames</key> <array/> <key>sslPolicy</key> <integer>0</integer> </dict> </plist>
其中 <proxies> 的部份就是設定 reverse proxy 的部份,在這裡只是將 http://example.com/scm 轉到 http://localhost:8080/scm 而已。 將檔案放到 /Library/Server/Web/Config/apache2/webapps/ 目錄後,再執行
webappctl start org.scm-manager.webapp.proxy example.com
執行後可以看看 /Library/Server/Web/Config/apache2/site/ 內關於 example.com 的設定檔,已經加進了 reverse proxy 的設定才對。