目錄
簡介
Nginx ("engine x") 是一款輕量級,高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器。
傳輸層的負載均衡有LVS(Linux) 和 NLB(Windows)
常用命令
nginx -v
// nginx 版本start nginx
// 啟動nginx,不阻塞命令視窗nginx -s stop
|nginx -s quit
// 快速停止 | 有序退出nginx -s reload
// 載入配置重新啟動
功能
代理
server {
listen 8080; # 監聽8080埠
resolver 114.114.114.114; # dns解析地址
location / {
proxy_pass $scheme://$host$request_uri; # 代理到哪個地址
proxy_set_header Host $http_host;
#allow 127.0.0.1; # 允許127.0.0.1地址訪問
#deny all; # 禁止所有地址訪問(allow位置在上面,所以127.0.0.1仍能訪問)
}
}
反向代理
server {
listen 8081; # 監聽8080埠
server_name localhost; # 虛擬hostName
location / {
proxy_pass http://127.0.0.1:8081; # 反向代理到的伺服器
}
}
叢集
HTTP叢集
upstream clusterName {
# 透過weight設定每臺伺服器分配請求站的權重,值越高分配的越多。
server 127.0.0.1:9000 weight=4;
server 127.0.0.1:8082 weight=1;
# ip_hash會計算ip對應hash值,然後分配到固定伺服器
ip_hash;
}
location / {
proxy_pass http://clusterName; # 反向代理到群集伺服器
# 設定主機頭和客戶端真實地址,以便伺服器獲取客戶端真實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;
}
TCP叢集
- 和http同級
stream {
server {
listen 1034;
proxy_pass app;
}
upstream app {
server 192.168.0.111:5672;
server 192.168.0.112:5672;
}
}
重定向
location / {
rewrite ^/(.*)$ http://www.xx.com/$1 permanent;
}
- flag
- last – 基本上都用這個Flag。
- break – 中止Rewirte,不在繼續匹配
- redirect – 返回臨時重定向的HTTP狀態302
- permanent – 返回永久重定向的HTTP狀態301
靜態檔案
location /^(.*) {
root html; # 根目錄為html資料夾
index $1 index.html index.htm; # $1表示正則匹配第一項
}
繫結證書
# HTTPS server
#
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /nginx/server.cer; # 公鑰(一般為公鑰證書 + 中級證書)
ssl_certificate_key /nginx/server.key; # 私鑰
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
}
常見問題
-
與IIS(80埠)衝突
- 被System佔用
- 找到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTP下的Start修改其值為0,重啟電腦即可
- 被IIS佔用
- 停用IIS 80埠的網站
- 被System佔用
-
nginx群集
- 如果nginx伺服器掛了,那我們的站點就直接掛了,可以透過keepalived元件來搭建多臺nginx服務提供服務。
-
error.log 錯誤日誌:signal process started
- 並非錯誤,只要執行-s reload就會發出