前幾天實驗了下 nginx 配置反向代理服務器。雖然 nginx 的安裝很麻煩,可是用起來卻是很簡單。不過組裏沒人用過 nginx,apache 服務器你們卻是蠻熟,爲了減小 ops team 的工做量,我決定使用 apache。node
我記得本科時安裝過 apache 服務器,當初沒有遇到困難。而此次安裝卻總也安裝不成功,公司對機器的權限管理的很嚴格,我沒有 root 權限,沒有鏈接外網權限,編譯 apache 時有不少依賴拿不到,最後仍是請 ops team 的人幫忙搞定的。nginx
配置 proxy module。apache 服務器的 proxy module 是安裝可選的,編譯時沒有加入反向代理 module,但在編譯完成後,依然能夠經過修改配置動態加載。配置在 conf/httpd.conf 中,把反向代理相關的 module uncomment 就好。這裏須要注意,若是 module 之間存在依賴關係,apache 不會自動 resolve 依賴,反之,它會在 error.log 中告訴咱們缺乏哪一個模塊。web
至於反向代理的配置,也在 httpd.conf 中,配置的寫法和 nginx 很是相似,對於個人需求,只要在 httpd.conf 中添加apache
Listen 8080 <VirtualHost *:8080> LogLevel error <Location /> ProxyPass http://hostname1:2014/ ProxyPass http://hostname2:2014/ #ProxyPassReverse http://mywebsite.jamescoyle.net/ </Location> </VirtualHost>
須要注意,2014端口後面須要添加一個 / 否則 url 的轉換會出錯。服務器
關閉 hostname1 上的服務後,apache 會把 request 路由到 hostname2 上,和我需求一致。負載均衡
反向代理搭建完畢後我依然對某些配置不是很理解,好比 ProxyPassReverse,ServerName 等等。測試
後記:上面並無實現負載均衡。url
<VirtualHost *:2014> LogLevel info <Proxy balancer://mycluster> BalancerMember http://host1:2015 BalancerMember http://host2:2015 </Proxy> ProxyPass / balancer://mycluster/ </VirtualHost>
我覺得配上兩個 ProxyPass 就實現了負載均衡,實際並不是如此, ProxyPass 配置多條的話,後面的會覆蓋前面的,可是好處是當一個 node down 掉後,apache 會自動路由到可用的。上面的配置纔是真正的負載均衡,策略是默認的 byRequests. 須要注意的是, BalanceMember 後面沒有 /,ProxyPass 後面有 /spa
配置完測試了幾回,發現兩個 node 都有請求的到來。.net
關於配置:
apache 提供了不少詳細的配置,用於自定義反向代理/負載均衡的行爲。好比,lbmethod 能夠選取 byRequests, byTraffic 等等,還能夠設置 lbfactor, timeout, retry