nginx 虛擬主機 反向代理 負載均衡
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 虛擬主機 反向代理 負載均衡