Nginx反向代理 負載均衡 動靜分離 虛擬主機配置

nginx配置文件組成

  • 全局塊
從配置文件開始到events塊之間的內容,主要會設置一些影響nginx服務器整體運行的配置指令。
比如:worker_processes 1;worker_processes值越大,可以支持的并發(fā)處理量越多。
  • events塊
events涉及的指令主要影響nginx服務器與用戶的網絡連接。
比如:worker_connections 1024; 支持的最大連接數。
  • http塊
Nginx服務器配置中最頻繁的部分
http塊包括http全局塊,server塊

Nginx配置實例

  • 反向代理實例1
80、8080端口都需要對外開放
service {
    listen  80;
    service_name 192.168.17.129;
    
    location / {
        root html;
        proxy_pass http://127.0.0.1:8080; // 80端口轉發(fā)到8080端口
        index index.html index.htm;
    }
}

訪問192.168.17.129:80 時轉發(fā)到8080端口
  • 反向代理實例2
實現效果:使用Ngix反向代理,根據訪問的路徑跳轉到不同端口的服務中
service {
    listen  9001;
    service_name 192.168.17.129;
    
   location ~ /edu/ {
       proxy_pass http://127.0.0.1:8080;
   }
   
   location ~ /vod/ {
       proxy_pass http://127.0.0.1:8081;
   }
}

訪問192.168.17.129:9001/edu/index.html 轉發(fā)端口至8080
訪問192.168.17.129:9001/vod/index.html 轉發(fā)端口至8081

9001、8081、8080 端口都需要對外開放
  • location指令說明
該指令用于匹配URL。
語法:location [ = | ~ | ~* | ^~] url {
    
}

1. =:用于不含正則表達式的url前,要求請求字符串與url嚴格匹配,如果匹配成功,就停止繼續(xù)向下搜索并立即處理該請求。
2. ~:用于表示url包含正則表達式,并且區(qū)分大小寫。
3. ~*:用于表示url包含正則表達式,并且不區(qū)分大小寫。
4. ^~:用于不含正則表達式的url前,要求nginx服務器找到標識url和請求字符串匹配度最高的location后,立即使用此location處理請求,而不再使用location塊中的正則url和請求字符串做匹配。

注意:如果url包含正則表達式,則必須要有~或者~*表示。

負載均衡

  • 配置實例
1.在http模塊加上:(舉例)
upstream www.myweb.com {
    server 127.0.0.1:9100 weight = 3;
    server 127.0.0.1:9200 weight = 1;
}

其中weight代表權重,用于后端服務器性能不均的情況下,訪問比率約等于權重之比,權重越大訪問機會越多。

upstream是配置nginx與后端服務器負載均衡非常重要的一個模塊,并且它還能對后端的服務器的健康狀態(tài)進行檢查,若后端服務器中的一臺發(fā)生故障,則前端的請求不會轉發(fā)到該故障的機器。

2.在server模塊里添加:(舉例)
location /myweb {
    proxy_pass http://www.myweb.com; 
}
注意:這里的www.myweb.com要和upstream后面配置的地址或者域名保持一致。
  • Nginx常用負載均衡策略(后端做負載均衡的服務器必須IP段保持一致)
1.輪詢(默認)
每個請求輪流分配到不同的后端服務器,如果后端服務器down掉,將自動刪除。

舉例:
upstream 域名 {
    server 192.168.0.14;
    server 192.168.0.15;
}

2.權重
每個請求按一定比例分發(fā)到不同的后端服務器,weight值越大訪問的比例越大,用于后端服務器性能不均的情況。

舉例:
upstream 域名 {
    server 192.168.0.14 weight=3;
    server 192.168.0.15 weight=1;
}
該情況兩個服務器的訪問比例為3:1

3.ip_hash
也叫域名綁定,每個請求按訪問ip的hash值分配,這樣每個訪問客戶端會固定訪問一個后端服務器,可以解決會話session丟失的問題;

舉例:
upstream 域名 {
    ip_hash;
    server 192.168.0.14;
    server 192.168.0.15;
}

4.最少連接
web請求會被轉發(fā)到連接數最少的服務器上。

舉例:
upstream 域名 {
    least_conn;
    server 192.168.0.14;
    server 192.168.0.15;
}
  • 負載均衡其他幾個配置
upstream 域名 {
    server 192.168.0.14;
    server 192.168.0.15 backup;(其他所有的非backup機器down的時候,才會請求backup服務器,相當于是一個備用服務器)
}    

upstream 域名 {
    server 192.168.0.14;
    server 192.168.0.15 down;(down表示當前的server是down狀態(tài),不參與負載均衡)
}

動靜分離

  • 靜態(tài)代理
把所有靜態(tài)資源的訪問改為訪問nginx,因為nginx更擅長于靜態(tài)資源的處理,性能更好,效率更高。所以在實際應用中,我們將靜態(tài)資源比如圖片、css、html、js等交給nginx處理。

nginx靜態(tài)代理實現方式:
1.通過在nginx.conf配置文件中添加靜態(tài)資源的location。

舉例:
#當訪問靜態(tài)資源,則從linux服務器/var/www/static目錄下獲取
location ~ .*\.(js|css|html|htm|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
    root /var/www/static;
}

其中:
~ :表示正則匹配,也就是說后面的內容可以是正則表達式。
第一個. :表示任意一個字符。
* :表示一個或多個字符。
\. :是轉義字符,是后面這個點的轉義字符。
| :表示或者
$ :表示結尾

2.通過在nginx.conf配置文件中配置靜態(tài)資源所在目錄實現。

舉例:
location ~ .*/(css|js|img|images) {
    root /var/www/static;
}
我們將靜態(tài)資源放入/var/www/static目錄下,然后用戶訪問時由nginx返回這些靜態(tài)資源。

虛擬主機

虛擬主機,就是把一臺物理服務器劃分成多個“虛擬”的服務器,這樣我們的一臺物理服務器就可以當作多個服務器來使用,從而可以配置多個網站。

Nginx提供虛擬主機功能,就是為了讓我們不需要安裝多個Nginx,就可以運行多個網站。

Nginx下,一個server標簽就是一個虛擬主機。

Nginx的虛擬主機就是通過nginx.conf中server節(jié)點指定的,想要設置多個虛擬主機,配置多個server節(jié)點即可。

舉例:
1.基于域名的虛擬主機
基于域名的虛擬主機是最常見的一種虛擬主機

server {
    listen 80;
    server_name www.shop.com;
    location /myweb {
        proxy_pass http://www.shop.com
    }
}

 server {
    listen 80;
    server_name www.p2p.com;
    location /myweb {
        proxy_pass http://www.p2p.com
    }
}

2.基于端口的虛擬主機
基于端口的虛擬主機配置,使用端口來區(qū)分。
瀏覽器使用同一個域名+端口 或 同一個IP地址+端口訪問

server {
    listen 8080;
    server_name www.myweb.com;
    location /myweb {
        proxy_pass http://www.myweb.com;
    }
}

  server {
    listen 9090;
    server_name www.myweb.com;
    location /p2p {
        proxy_pass http://www.p2p.com;
    }
}

配置多個虛擬主機方式:

方式一:就是在nginx.conf文件中添加多個server

方式2:通過include的方式引入虛擬主機配置

include /usr/local/nginx/conf/vhost/vhost.conf;
將虛擬目錄的配置文件加入到“http {}”部分的末尾,與其他server并列。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容