服務管理
sudo systemctl status nginx # nginx當前狀態
sudo systemctl reload nginx # 重新加載 nginx
sudo systemctl restart nginx # 重啟nginxsudo nginx -t # 檢查語法
nginx # 啟動
nginx -s reload # 重啟
nginx -s stop # 關閉進程
nginx -s quit # 平滑關閉nginx
nginx -V # 查看nginx的安裝狀態,
Docker 安裝
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
簡單代理
location / {proxy_pass http://127.0.0.1:3000;proxy_redirect off;proxy_set_header Host $host;
}
全局變量
$args | 這個變量等于請求行中的參數,同 $query_string |
$remote_port | 客戶端的端口 |
$content_length | 請求頭中的 Content-length 字段 |
$remote_user | 已經經過 Auth Basic Module 驗證的用戶名 |
$content_type | 請求頭中的 Content-Type 字段 |
$request_filename | 當前請求的文件路徑,由 root 或alias指令與URI請求生成 |
$document_root | 當前請求在 root 指令中指定的值 |
$scheme | HTTP方法(如http,https) |
$host | 請求主機頭字段,否則為服務器名稱 |
$hostname | 主機名 |
$http_user_agent | 客戶端agent信息 |
$http_cookie | 客戶端cookie信息 |
$server_protocol | 請求使用的協議,通常是HTTP/1.0或HTTP/1.1 |
$server_addr | 服務器地址,在完成一次系統調用后可以確定這個值 |
$server_name | 服務器名稱 |
$server_port | 請求到達服務器的端口號 |
$limit_rate | 這個變量可以限制連接速率 |
$request_method | 客戶端請求的動作,如 GET/POST |
$request_uri | 包含請求參數的原始URI,不包含主機名,如:/foo/bar.php?arg=baz |
$remote_addr | 客戶端的IP地址 |
$uri | 不帶請求參數的當前URI,$uri不包含主機名,如 /foo/bar.html |
$document_uri | 與 $uri 相同 |
$nginx_version | nginx 版本 |
更多全局變量查看官方文檔
監聽端口
server {listen 80; # 標準 HTTP 協議listen 443 ssl; # 標準 HTTPS 協議listen 443 ssl http2; # 對于 http2listen [::]:80; # 使用 IPv6 在 80 上收聽# 僅收聽使用 IPv6listen [::]:80 ipv6only=on;
}
域名 (server_name)
server {# 監聽 example.comserver_name example.com;# 監聽多個域server_name example.com www.example.com;# 監聽所有子域server_name *.example.com;# 監聽所有頂級域server_name example.*;# 監聽未指定的主機名(監聽 IP 地址本身)server_name "";
}
負載均衡(簡單實例)
upstream node_js {server 0.0.0.0:3000;server 0.0.0.0:4000;server 127.155.142.421;
}
負載均衡(權重)
upstream test {server localhost:8080 weight=9;server localhost:8081 weight=1;
}
upstream ip_hash
upstream test {ip_hash;server localhost:8080;server localhost:8081;
}
解決負載均衡 session 的問題
upstream fair
upstream backend {fair;server localhost:8080;server localhost:8081;
}
響應時間短的優先分配
server 可選參數
weight | 訪問權重數值越高,收到請求越多 |
fail_timeout | 指定的時間內必須提供響應 |
max_fails | 嘗試失敗服務器連接的最大次數 |
down | 標記一個服務器不再接受任何請求 |
backup | 有服務器宕機,標記的機器接收請求 |
配置示例
upstream test {server 127.0.0.1:83 weight=9; # 權重server 127.0.0.1:83 weight=1; # 權重# 失敗超時時間server 127.0.0.1:83 max_fails=3;server 127.0.0.1:83 weight=3 down;
}
upstream url_hash
upstream backend {hash $request_uri;hash_method crc32;server localhost:8080;server localhost:8081;
}
按訪問url的hash結果來分配請求
upstream keepalive
upstream memcached_backend {server 127.0.0.1:11211;server 10.0.0.2:11211;keepalive 32;
}
激活緩存以連接到上游服務器
子文件夾中的代理
location /folder/ { # / 很重要!proxy_pass http://127.0.0.1:3000/; # / 很重要!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;
}