php nginx反向 Proxy

來源:互聯網
上載者:User

標籤:log   開發   ack   tar   crt   mic   logs   war   linu   

  

一、概念理解  1.Proxy 伺服器

  Proxy 伺服器,客戶機在發送請求時,不會直接發送給目的主機,而是先發送給Proxy 伺服器,代理服務接受客戶機請求之後,再向主機發出,並接收目的主機返回的資料,存放在Proxy 伺服器的硬碟中,再發送給客戶機。

  2.為什麼要使用Proxy 伺服器  ①提高訪問速度

  由於目標主機返回的資料會存放在Proxy 伺服器的硬碟中,因此下一次客戶再訪問相同的網站資料時,會直接從Proxy 伺服器的硬碟中讀取,起到了緩衝的作用,尤其對於熱門網站能明顯提高請求速度。 

  ②防火牆作用

  由於所有的客戶機請求都必須通過Proxy 伺服器訪問遠端站台,因此可在Proxy 伺服器上設限,過濾某些不安全資訊。 

  ③通過Proxy 伺服器訪問不能訪問的目標網站 

  互連網上有許多開發的Proxy 伺服器,客戶機在訪問受限時,可通過不受限的Proxy 伺服器訪問目標網站,通俗說,我們使用的FQ瀏覽器就是利用了Proxy 伺服器,雖然不能出國,但也可直接存取外網。

  3.正向 Proxy&反向 Proxy  ①正向 Proxy

  正向 Proxy,架設在客戶機與目標主機之間,只用於代理內部網路對Internet的串連請求,客戶機必須指定Proxy 伺服器,並將本來要直接發送到Web伺服器上的http請求發送到Proxy 伺服器中。

  ②反向 Proxy

  反向 Proxy伺服器架設在伺服器端,通過緩衝經常被請求的頁面來緩解伺服器的工作量,將客戶機請求轉寄給內部網路上的目標伺服器;並將從伺服器上得到的結果返回給Internet上請求串連的用戶端,此時Proxy 伺服器與目標主機一起       對外表現為一個伺服器。

  4.反向 Proxy的應用

  現在許多大型web網站都用到反向 Proxy。除了可以防止外網對內網伺服器的惡性攻擊、緩衝以減少伺服器的壓力和訪問安全控制之外,還可以進行負載平衡,將使用者請求分配給多個伺服器。 

  5.為什麼使用nginx

  nginx是一個輕量級、高效能的web server,他可以直接作為http server來代替apache,對PHP需要FastCGI處理器支援,還可以作為一個反向 Proxy伺服器來實現負載平衡。雖然apache的mod_proxy和mod_cache也可以實現對多台app server的反向 Proxy和負載平衡,但是nginx在處理並發上有著很大的優勢。

二、準備工作  1.伺服器

  因為我們要使用nginx反向 Proxy伺服器來達到一個負載平衡的效果,所以需要搭建至少三台伺服器才可以類比這個效果。我使用VMware搭建了三台虛擬機器,系統是centos6.5.

  2.環境

  因為需要一台伺服器來作為反向 Proxy伺服器,而且我是phper,所以反向 Proxy伺服器是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這台是反向 Proxy伺服器,36,37是兩台真實伺服器。

  1.編寫測試檔案

  #cd  var/www/html;#這裡是預設web目錄,根據自己實際情況編寫可訪問的一個php檔案

  #vi index.php#這裡可以隨便寫點東西,但是要區分開另一台伺服器

  

  另外一台伺服器同理

  

 2.配置反向 Proxy伺服器

  #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;//這個名字就是我們訪問反向 Proxy伺服器的網域名稱,注意與上面的伺服器叢集名一致
    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反向 Proxy

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.