本文主要介紹 Nginx 的實際使用,文中所使用到的軟體版本:Centos 7.9.2009、Nginx 1.22.1,
1、環境準備
這里主要演示使用 Nginx 代理 Http 及 TCP 應用,環境資訊如下:
| 主機 | 用途 | Http 埠 | TCP 埠 |
| 10.49.196.30 | 部署 Http、TCP 應用 | 8080 | 9090 |
| 10.49.196.31 | 部署 Http、TCP 應用 | 8080 | 9090 |
| 10.49.196.33 | 部署 Nginx |
2、Http 應用
配置代理時都新建新的組態檔 conf/http.conf,然后在主組態檔 conf/nginx.conf 中引入該檔案:
http {
include mime.types;
default_type application/octet-stream;
...
include http.conf;
...
}
2.1、普通代理
server { listen 8081; server_name localhost-8081; access_log logs/access-8081.log; location /myapp { proxy_pass http://10.49.196.30:8080/myapp; } location / { proxy_pass https://www.baidu.com; } }
代理地址為:http://10.49.196.33:8081/myapp,被代理地址為:http://10.49.196.30:8080/myapp;根地址代理百度網站,
2.2、負載均衡
upstream cluster { server 10.49.196.30:8080 weight=1; server 10.49.196.31:8080 weight=1; round-robin; } server { listen 8082; server_name localhost-8082; access_log logs/access-8082.log; location /myapp { proxy_pass http://cluster/myapp; } }
Nginx 支持三種負載均衡演算法:
- round-robin:輪詢(默認演算法)
- least-connected:下一個請求將分配給當前擁有最少活躍連接數的服務器,對應的 Nginx 指令為 least_conn
- ip-hash:同一 ip 的請求分配到同一個服務器,對應的 Nginx 指令為 ip_hash
Nginx 還支持通過指定服務器的權重(weight) 來影響負載均衡演算法,上面的配置意味著兩臺服務器在特定負載均衡演算法上具有相同的資格,
2.3、組態檔服務器
server { listen 8083; server_name localhost-8083; access_log logs/access-8083.log; location / { autoindex on; autoindex_exact_size on; autoindex_localtime on; charset utf-8; root /mnt/centos7; } }
2.4、啟用 Nginx Status
server { listen 8083; server_name localhost-8083; access_log logs/access-8083.log; location /nginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; } ... }
2.4、限流
2.4.1、限制訪問頻率
limit_req_zone $binary_remote_addr zone=peripZone:10m rate=100r/m; server { listen 8081; server_name localhost-8081; access_log logs/access-8081.log; location /myapp { limit_req zone=peripZone burst=5 nodelay; proxy_pass http://10.49.196.30:8080/myapp; } }
limit_req_zone 定義了一個名為 peripZone 的共享記憶體區域,大小為 10M,最大訪問速率為:每分鐘 100 個請求;該區域以“客戶端地址”為 key 來保存狀態資訊,
limit_req 設定使用的共享記憶體區域,burst 定義了過量請求的快取佇列大小,超過訪問速率的請求將保存該佇列中;如果快取佇列也慢了將直接回傳 503;nodelay 表示快取佇列中請求將不會被延遲處理(雖然超過了請求速率,快取佇列中請求也立即被處理),也可通過 delay=number 來設定快取佇列中請求被延遲處理的個數,
2.4.2、限制并發連接數
limit_conn_zone $server_name zone=perserverZone:10m; server { listen 8081; server_name localhost-8081; access_log logs/access-8081.log; location /myapp { limit_conn perserverZone 5; proxy_pass http://10.49.196.30:8080/myapp; } }
limit_conn_zone 定義了一個名為 perserverZone 的共享記憶體區域,大小為 10M;該區域以“虛擬服務器名稱”為 key 來保存狀態資訊,
limit_conn 設定使用的共享記憶體區域,并定義最大并發連接數,
2.5、配置 Https
2.5.1、生成證書
啟用 Https,需要使用 OpenSSL 創建證書,
A、生成根證書
openssl genrsa -out ca.key openssl req -new -key ca.key -out ca.csr openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.pem
B、生成服務端證書
openssl genrsa -out server.key openssl req -new -key server.key -out server.csr openssl ca -days 3650 -in server.csr -cert ca.pem -keyfile ca.key -out server.pem
C、生成客戶端證書
openssl genrsa -des3 -out client.key 1024 openssl req -new -key client.key -out client.csr openssl ca -days 1500 -in client.csr -cert ca.pem -keyfile ca.key -out client.pem openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -out client.p12
使用 OpenSSL 創建證書的詳細說明可參考:OpenSSL 介紹(5)--數字證書;這里生成的證書假設都存放在 /home/mongo/ssl 目錄下,
2.5.2、Nginx 中配置 Https
server { listen 4430 ssl; server_name localhost-8084; access_log logs/access-8084.log; ssl_certificate /home/mongo/ssl/server.pem; ssl_certificate_key /home/mongo/ssl/server.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_client_certificate /home/mongo/ssl/ca.pem; ssl_verify_client on; location /myapp { proxy_pass http://10.49.196.30:8080/myapp; } }
上述配置開啟了客戶端驗證,客戶端訪問時需要使用客戶端證書(client.p12)來訪問;瀏覽器訪問匯入該證書即可,Java 客戶端的訪問可參考:Java呼叫Http/Https介面(2)--HttpURLConnection/HttpsURLConnection呼叫Http/Https介面,如果不需要客戶端驗證,注釋掉如下配置即可:
ssl_client_certificate /home/mongo/ssl/ca.pem;
ssl_verify_client on;
3、TCP 應用
配置代理時都新建新的組態檔 conf/tcp.conf,然后在主組態檔 conf/nginx.conf 最后該檔案:
...
include tcp.conf;
3.1、普通代理
stream { server { listen 9090; proxy_pass 10.49.196.30:9090; } }
代理地址為:10.49.196.33:9090,被代理地址為:10.49.196.30:9090,
3.2、負載均衡
stream { upstream tcp3031 { server 10.49.196.30:9090; server 10.49.196.31:9090; } server { listen 9091; proxy_pass tcp3031; } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551527.html
標籤:其他
下一篇:返回列表
