您的位置:首頁>正文

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.搭建環境

這個東西要說的太多了, 這裡不一一敘述了, 我有兩篇文章寫了怎麼搭建這兩種環境, 連結:

//有什麼問題可以下方留言, 如果我會的盡力解決。

三、伺服器配置

這是我在固定了虛擬機器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:WindowsSystem32driversetc然後編輯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的問題

上面只寫了幾種常用的東西,還有很多我不知道的、沒寫的歡迎大家一起交流! 我的物理機是windows的系統,打開C:WindowsSystem32driversetc然後編輯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的問題

上面只寫了幾種常用的東西,還有很多我不知道的、沒寫的歡迎大家一起交流!
同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示