1. 程式人生 > >nginx 虛擬主機 反向代理 負載均衡

nginx 虛擬主機 反向代理 負載均衡

連接數 免費 header 保存 服務端 ron 代理服務器 pattern 服務

nginx是一款免費、開源的http服務器,它是由俄羅斯程序設計師開發的,官方測試,nginx能支撐5萬的並發量,主要功能有虛擬主機、反向代理和負載均衡等。

nginx配置

# 全局塊 
... 
# events塊 
events {
    ... 
} 
# http塊
http { 
    # http全局塊 
    ... 
    # 虛擬主機server塊 
        server { 
            # server全局塊 
            ... 
            # location塊 
            location [PATTERN] { 
          ...
       } location [PATTERN] {
          ...
       }
} server { ... } # http全局塊 ... }


在上述配置中我們可以看出,Nginx配置文件由以下幾個部分構成:

全局塊:配置影響nginx全局的指令。一般有運行nginx服務器的用戶組,nginx進程pid存放路徑,日誌存放路徑,配置文件引入,允許生成worker process數等。

events塊:配置影響nginx服務器或與用戶的網絡連接。有每個進程的最大連接數,選取哪種事件驅動模型處理連接請求,是否允許同時接受多個網路連接,開啟多個網絡連接序列化等。

http塊:可以嵌套多個server,配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日誌自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數等。

server塊:配置虛擬主機的相關參數,一個http中可以有多個server。

location塊:配置請求的路由,以及各種頁面的處理情況。

虛擬主機

nginx可以通過配置多個server來配置多臺虛擬主機,一個server對應一臺虛擬主機,一臺虛擬主機上可部署一個網站。

server {

   listen 80;

   server_name www.domain1.com;

   index index.html;

   root /data/www/html;

}

server {

   listen 80;

   server_name www.domain2.com;

   index index.html;

   root /data/www/static;
}

反向代理

反向代理是相對於正向代理而言的,正向代理服務於客戶端,反向代理服務於服務端。反向代理服務器位於客戶端瀏覽器和web服務器之間,客戶端不能直接向web服務器發請求,所有的請求都必須先發給反向代理服務器,然後由反向代理服務器轉發給web服務器,同樣,web服務器返回的響應也要先發給反向代理服務器,然後再轉發給客戶端。反向代理服務器發揮反向代理作用時就起到了一個中轉站的作用。反向代理可以保護網站安全、緩存網站的靜態資源,提高網站的響應速度、負載均衡。

upstream apache{
    server 192.168.68.43:8080;
}
server {

        listen       80;

        server_name  www.mydomain1.com;

        location / {

            proxy_pass   http://apache;

            index  index.html index.htm;

        }

}

負載均衡

要想實現負載均衡的功能,必須先實現反向代理的功能。當反向代理服務器代理的是一個web服務器集群而不是單個web服務器時,這就是負載均衡了。負載均衡指的是多個服務器共同完成一件事情,核心是“分攤壓力”。Ngnix實現負載均衡指的是將請求轉發給服務器集群。Ngnix默認處理負載均衡的方式是“輪詢”,也可以通過weight來調整權重。

#設定負載均衡的服務器列表
#weigth參數表示權值,權值越高被分配到的幾率越大
upstream apache{
    server 192.168.68.40:8080 weight=1;
    server 192.168.68.41:8080 weight=1;            
}
   
server {
    #偵聽的80端口
    listen       80;
    server_name  localhost;
    #設定查看Nginx狀態的地址
    location /nginxstatus{
         stub_status on;
         access_log on;
         auth_basic "nginxstatus";
         auth_basic_user_file htpasswd;
    }
    #匹配以jsp結尾的,tomcat的網頁文件是以jsp結尾
    location / {
        index index.html index.php;
        proxy_pass   http://apache;    #在這裏設置一個代理,和upstream的名字一樣
        #以下是一些反向代理的配置可刪除
        proxy_redirect             off; 
        #後端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP
        proxy_set_header           Host $host; 
        proxy_set_header           X-Real-IP $remote_addr; 
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; 
        client_max_body_size       10m; #允許客戶端請求的最大單文件字節數
        client_body_buffer_size    128k; #緩沖區代理緩沖用戶端請求的最大字節數
        proxy_connect_timeout      300; #nginx跟後端服務器連接超時時間(代理連接超時)
        proxy_send_timeout         300; #後端服務器數據回傳時間(代理發送超時)
        proxy_read_timeout         300; #連接成功後,後端服務器響應時間(代理接收超時)
        proxy_buffer_size          4k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小
        proxy_buffers              4 32k; #proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置
        proxy_busy_buffers_size    64k; #高負荷下緩沖大小(proxy_buffers*2)
        proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳
    }
}

nginx 虛擬主機 反向代理 負載均衡