現在可以執行的 Daemon 太多了, PHP、Python、Ruby、Node.js、Go... 等等, 都會想要拿來跑 Web service,但是 80 Port 只有一個,所以前面只好擋一層 Apache 來達成。
於是使用 Apache 的 Proxy 功能來將後面各種服務的 Port 接上。
使用 Apache Proxy 統整多個 Port 服務
下述主要是幾個步驟:
- 開啟 Apache proxy module
- 設定 VirtualHost, 指定後端對應的 Port.
執行步驟如下:
- sudo a2enmod proxy proxy_http
- vim /etc/apache2/sites-enabled/xxx.conf
<VirtualHost *:80> ServerName HOSTNAME ProxyRequests Off # 避免被當 proxy 跳板 ProxyPass / http://localhost:8000/ #ProxyPass /mail http://mal.HOSTNAME/ #ProxyPass /jsp http://localhost:8080/ AddDefaultCharset utf-8 </VirtualHost>
把 對外的IP(X-Forwarded-For) 直接轉進來
- apt-get install rpaf # libapache2-mod-rpaf - module for Apache2 which takes the last IP from the 'X-Forwarded-For' header
<IfModule rpaf_module> RPAFenable On RPAFsethostname On #RPAFproxy_ips 要加入自己的 IP RPAFproxy_ips 127.0.0.1 123.123.123.123 RPAFheader X-Forwarded-For </IfModule>
- sudo service restart apache2
不知道 Nginx 跟 HAProxy 做一樣的事情是否有優劣處。
這個我倒是沒有去測試,不過 HAProxy 專門做這件事情的,效率應該會比較好吧?
嗯嗯 HAProxy 好像比較底層。
搭配 Docker 的用法:
http://jasonwilder.com/blog/2014/07/15/docker-service-discovery/