目錄
一、Nginx 簡介
二、核心功能詳解
三、關鍵指令解析
四、性能優化要點
五、常見應用場景
一、Nginx 簡介
- 定位
- 高性能的?HTTP/反向代理服務器,同時支持郵件協議代理(IMAP/POP3/SMTP)。
- 采用?事件驅動、異步非阻塞?架構,支持高并發(單機可處理數萬到百萬級并發連接)。
- 內存占用低,配置文件簡潔,模塊化設計。
- 核心優勢
- 輕量級:相比 Apache,資源消耗更低。
- 高擴展性:通過模塊化設計支持動態擴展功能。
- 熱部署:支持不停止服務更新配置、升級版本。
二、核心功能詳解
1. 靜態資源服務器(Web Server)
- 功能:直接托管 HTML、CSS、JS、圖片等靜態文件。
- 配置示例:
server {
??? listen 80;
??? server_name example.com;
??? root /var/www/html;? # 靜態文件根目錄
??? location / {
??????? index index.html;
??? }
??? # 壓縮優化
??? gzip on;
??? gzip_types text/plain application/json text/css;
}
2. 反向代理(Reverse Proxy)
- 功能:將客戶端請求轉發到后端服務器,隱藏真實服務端信息。
- 典型場景:負載均衡、安全隔離、SSL 終止。
- 配置示例:
server {
??? listen 80;
??? server_name api.example.com;
??? location / {
??????? proxy_pass http://backend_servers;? # 轉發到后端服務器組
??????? proxy_set_header Host $host;
??????? proxy_set_header X-Real-IP $remote_addr;
??? }
}
3. 負載均衡(Load Balancing)
- 支持算法:
- round-robin(默認,輪詢)
- least_conn(最小連接數)
- ip_hash(基于客戶端 IP 哈希分配)
- weight(權重分配)
- 配置示例:
upstream backend_servers {
??? ip_hash;? # 會話保持
??? server 192.168.1.101:8080 weight=3;
??? server 192.168.1.102:8080;
??? server 192.168.1.103:8080 backup;? # 備用服務器
}
4. SSL/TLS 終止
- 功能:處理 HTTPS 加密通信,減輕后端服務器壓力。
- 配置示例:
server {
??? listen 443 ssl;
??? server_name secure.example.com;
??? ssl_certificate /etc/nginx/ssl/server.crt;
??? ssl_certificate_key /etc/nginx/ssl/server.key;
??? ssl_protocols TLSv1.2 TLSv1.3;
??? location / {
??????? proxy_pass http://backend_servers;
??? }
}
5. 動靜分離
- 功能:將動態請求(如 PHP、Java)和靜態資源(如圖片、CSS)分開處理。
- 配置示例:
server {
??? location /static/ {
??????? alias /data/static/;? # 靜態資源目錄
??????? expires 30d;????????? # 緩存控制
??? }
??? location / {
??????? proxy_pass http://app_server;? # 動態請求轉發
??? }
}
6. 虛擬主機(Virtual Host)
- 功能:單機托管多個域名/網站。
- 配置示例:
server {
??? listen 80;
??? server_name site1.com;
??? root /var/www/site1;
}
server {
??? listen 80;
??? server_name site2.com;
??? root /var/www/site2;
}
7. 訪問控制
- 功能:基于 IP、用戶認證限制訪問。
- 配置示例:
location /admin/ {
??? allow 192.168.1.0/24;? # 允許特定 IP 段
??? deny all;????????????? # 拒絕其他 IP
??? auth_basic "Restricted";
??? auth_basic_user_file /etc/nginx/.htpasswd;? # 用戶認證
}
8. 日志管理
- 功能:記錄訪問日志和錯誤日志。
- 配置示例:
http {
??? log_format main '$remote_addr - $remote_user [$time_local] "$request" '
??????????????????? '$status $body_bytes_sent "$http_referer" '
??????????????????? '"$http_user_agent" "$http_x_forwarded_for"';
??? access_log /var/log/nginx/access.log main;
??? error_log /var/log/nginx/error.log warn;
}
9. 緩存加速
- 功能:緩存后端響應,減少重復請求。
- 配置示例:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
server {
??? location / {
??????? proxy_cache my_cache;
??????? proxy_pass http://backend;
??????? proxy_cache_valid 200 302 10m;? # 緩存有效時間
??? }
}
10. 熱部署與平滑重啟
- 熱部署:
nginx -s reload? # 重新加載配置(不中斷服務)
- 版本升級:
替換二進制文件后通過?kill -USR2 <master_pid>?實現無縫升級。
三、關鍵指令解析
- worker_processes:設置工作進程數(通常等于 CPU 核心數)。
- events { worker_connections 1024; }:單個工作進程的最大連接數。
- keepalive_timeout:長連接超時時間。
- client_max_body_size:限制客戶端請求體大小(如文件上傳)。
四、性能優化要點
- 啟用 Gzip 壓縮:減少傳輸數據量。
- 調整緩沖區:避免頻繁磁盤 I/O。
- 使用 HTTP/2:提升多請求并發效率。
- 限制并發連接:防止資源耗盡(如?limit_conn?模塊)。
五、常見應用場景
- Web 服務器(替代 Apache)
- API 網關
- CDN 邊緣節點
- 微服務入口(Kubernetes Ingress)
- 安全防護層(如限制 DDoS 攻擊)