Nginx 全模組安裝及匹配方式、反向代理和負載均衡配置

神奇二進位制發表於2022-01-06

一、安裝 OpenResty

OpenResty® 是一個基於 Nginx 與 Lua 的高效能 Web 平臺,其內部整合了大量精良的 Lua 庫、第三方模組以及大多數的依賴項。用於方便地搭建能夠處理超高併發、擴充套件性極高的動態 Web 應用、Web 服務和動態閘道器。
官網:https://openresty.org/cn/

[root@localhost ~]# wget https://openresty.org/package/centos/openresty.repo
[root@localhost ~]# sudo mv openresty.repo /etc/yum.repos.d/
[root@localhost ~]# sudo yum check-update
[root@localhost ~]# sudo yum install -y openresty

管理 OpenResty

[root@localhost ~]# systemctl start openresty.service
[root@localhost ~]# systemctl enable openresty.service

配置檔案路徑

[root@localhost nginx]# pwd
/usr/local/openresty/nginx

也可以像 nginx 一樣管理

[root@localhost sbin]# /usr/local/openresty/nginx/sbin/nginx -s reload
[root@localhost sbin]# /usr/local/openresty/nginx/sbin/nginx -s stop
[root@localhost sbin]# /usr/local/openresty/nginx/sbin/nginx -t

二、匹配方式

2.1 通用匹配

...
   server {
        listen       80;
        server_name  localhost;
        default_type text/html; # 以html標籤格式直接返回資訊。
    
        # 通用匹配優先順序最低。
        location / {
                echo "hello nginx";
        }
    }

測試結果

image-20211207215548161

2.2 完全匹配

完全匹配是優先順序別最高的匹配,如果滿足則直接匹配。

        location = /a {
                echo "=/a";
        }

測試結果

image-20211207220723390

2.3 進行字首匹配

# 第二高優先順序匹配
        location ^~ /a {
            echo "^~ /a";
        }

測試結果

image-20211207220509009

2.4 正規表示式匹配

# 匹配優先順序第三
        location ~ ^/\w {
            echo "~ ^/\w";
        }

測試結果

[root@localhost ~]# curl http://localhost/a
=/a
[root@localhost ~]# curl http://localhost/b
~ ^/\w

2.5 按照匹配程度

同優先順序的,按照匹配程度較高的先匹配

        location ^~ /a {
            echo "^~ /a";
        }
        location ^~ /a/b {
            echo "^~ /a/b";
        }

測試結果

[root@localhost ~]# curl http://localhost/a/b
^~ /a/b
[root@localhost ~]# curl http://localhost/a/c
^~ /a
[root@localhost ~]# curl http://localhost/a/b/c
^~ /a/b

匹配程度一樣的,則寫在前面的先匹配

        location ~ ^/\w {
            echo "~ ^/\w";
        }
        location ~ ^/[a-z] {
            echo "~ ^/[a-z]";
        }
[root@localhost ~]# curl http://localhost/g
~ ^/\w

調換位置之後

        location ~ ^/[a-z] {
            echo "~ ^/[a-z]";
        }
        location ~ ^/\w {
            echo "~ ^/\w";
        }

測試結果

[root@localhost ~]# curl http://localhost/g
~ ^/[a-z]

三、反向代理

3.1 常用代理

代理追加虛擬路徑,如果是代理到根目錄,需要加上“/”,否則找不到頁面。

        location /a/ {
            proxy_pass http://192.168.115.21:8081/;
        }

測試結果

image-20211207223247113

多個代理

        location /a/ {
            proxy_pass http://192.168.115.21:8081/;
        }
        location /b/ {
            proxy_pass http://192.168.115.21:8080/;
        }

測試結果

image-20211207224013825

3.2 根據不同的域名代理

    server
    {
        listen 80;
        server_name test.xxxxx.net;
        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.3.222;
        }
    }
    server
    {
        listen 80;
        server_name wiki.xxxxx.net;
        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8181;
        }
    }

測試結果

image-20220106160606993

四、負載均衡

4.1 隨機負載

    upstream group1 {
        server 192.168.115.21:8080;
        server 192.168.115.21:8081;
    }
        location /a/ {
            proxy_pass http://group1/;
        }

4.2 配置權重

    upstream group1 {
        server 192.168.115.21:8080 weight=1;
        server 192.168.115.21:8081 weight=1;
    }

        location /a/ {
            proxy_pass http://group1/;
        }

相關文章