php nginx反向代理
一、概念理解
1.代理服務器
代理服務器,客戶機在發送請求時,不會直接發送給目的主機,而是先發送給代理服務器,代理服務接受客戶機請求之後,再向主機發出,並接收目的主機返回的數據,存放在代理服務器的硬盤中,再發送給客戶機。
2.為什麽要使用代理服務器
①提高訪問速度
由於目標主機返回的數據會存放在代理服務器的硬盤中,因此下一次客戶再訪問相同的站點數據時,會直接從代理服務器的硬盤中讀取,起到了緩存的作用,尤其對於熱門站點能明顯提高請求速度。
②防火墻作用
由於所有的客戶機請求都必須通過代理服務器訪問遠程站點,因此可在代理服務器上設限,過濾某些不安全信息。
③通過代理服務器訪問不能訪問的目標站點
互聯網上有許多開發的代理服務器,客戶機在訪問受限時,可通過不受限的代理服務器訪問目標站點,通俗說,我們使用的FQ瀏覽器就是利用了代理服務器,雖然不能出國,但也可直接訪問外網。
3.正向代理&反向代理
①正向代理
正向代理,架設在客戶機與目標主機之間,只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。
②反向代理
反向代理服務器架設在服務器端,通過緩沖經常被請求的頁面來緩解服務器的工作量,將客戶機請求轉發給內部網絡上的目標服務器;並將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器與目標主機一起 對外表現為一個服務器。
4.反向代理的應用
現在許多大型web網站都用到反向代理。除了可以防止外網對內網服務器的惡性攻擊、緩存以減少服務器的壓力和訪問安全控制之外,還可以進行負載均衡,將用戶請求分配給多個服務器。
5.為什麽使用nginx
nginx是一個輕量級、高性能的web server,他可以直接作為http server來代替apache,對PHP需要FastCGI處理器支持,還可以作為一個反向代理服務器來實現負載均衡。雖然apache的mod_proxy和mod_cache也可以實現對多臺app server的反向代理和負載均衡,但是nginx在處理並發上有著很大的優勢。
二、準備工作
1.服務器
因為我們要使用nginx反向代理服務器來達到一個負載均衡的效果,所以需要搭建至少三臺服務器才可以模擬這個效果。我使用VMware搭建了三臺虛擬機,系統是centos6.5.
2.環境
因為需要一臺服務器來作為反向代理服務器,而且我是phper,所以反向代理服務器是linux+nginx+mysql+php。其余兩臺真實服務器是linux+apache+mysql+php,因為apache的性能比較穩定,模塊多而且bug少相對於nginx 來說。
3.搭建環境
這個東西要說的太多了,這裏不一一敘述了,我有兩篇文章寫了怎麽搭建這兩種環境,鏈接:
LAMP http://www.cnblogs.com/lina520/p/7240680.html
LNMP http://www.cnblogs.com/lina520/p/7240328.html
//有什麽問題可以下方留言,如果我會的盡力解決。
三、服務器配置
這是我在固定了虛擬機IP之後,然後用SecureCRT工具鏈接。35這臺是反向代理服務器,36,37是兩臺真實服務器。
1.編寫測試文件
#cd var/www/html;#這裏是默認web目錄,根據自己實際情況編寫可訪問的一個php文件
#vi index.php#這裏可以隨便寫點東西,但是要區分開另一臺服務器
另外一臺服務器同理
2.配置反向代理服務器
#cd etc/nginx#跳轉到nginx的配置頁面
#vi nginx.conf修改配置文件
我們在http模塊下增加如下配置,主要是一個upstream和server
upstream blance {
server 192.168.0.36:80; //A服務器
server 192.168.0.37:80; //B服務器
}
server{
listen 80;//真實服務器的端口號
server_name blance;//這個名字就是我們訪問反向代理服務器的域名,註意與上面的服務器集群名一致
location / {
proxy_pass http://blance;//這個與上面同理
proxy_set_header Host $host;//轉發請求的頭部
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3.配置訪問域名
因為是測試,所以沒有虛擬域名,但是可以自己制造一個。我的物理機是windows的系統,打開C:\Windows\System32\drivers\etc然後編輯hosts文件,在文件的末端把你想要請求的域名添加進去
保存之後,退出打開瀏覽器訪問這個域名,結果如下:
四、負載均衡策略
1.RR策略
就是我們通常說的輪詢策略,每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。
2.加權策略
指定輪詢幾率,weight和訪問比率成正比,用於後端服務器性能不均的情況。
只要修改upstream就好了,服務器就會按照權重去訪問。如上述配置,A服務器訪問的幾率是2/3,B是1/3,則訪問A兩次,訪問B一次。
3.ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。
采用了ip_hash策略之後會針對每個訪問的ip固定一個後端服務器,就不會再去訪問其他服務器,在會話保持的時候,可以解決session的問題
上面只寫了幾種常用的東西,還有很多我不知道的、沒寫的歡迎大家一起交流!
php nginx反向代理