1. 程式人生 > >php nginx反向代理

php nginx反向代理

lan 壓力 proxy 攻擊 com 分開 應用 8.0 客戶

  

一、概念理解

  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反向代理