Nginx 入門與進階玩法指南
一、什么是 Nginx?
Nginx(Engine X)是一個高性能的 HTTP 和反向代理服務器,同時也可以作為 IMAP/POP3/SMTP 郵件代理服務器。它最初由俄羅斯程序員 Igor Sysoev 開發,用于解決高并發下 Apache 性能瓶頸問題。如今,它已成為 Web 服務中最主流的服務器之一。
核心特點:
- 異步事件驅動架構,適合處理大量并發連接。
- 內存占用小,穩定性高。
- 支持熱部署、熱加載配置。
- 模塊化設計,便于擴展。
二、Nginx 能做什么?
- 靜態資源服務器:用于服務 HTML、CSS、JS、圖片、音視頻等文件。
- 反向代理服務器:將請求轉發給后端應用服務,比如 Node.js、Java、Python 程序。
- 負載均衡器:支持多種策略(輪詢、IP 哈希、最少連接等)。
- 緩存服務器:作為前端緩存層,大大減輕后端壓力。
- HTTPS 網關:用作 TLS 終端代理,配合 Let’s Encrypt 實現免費證書自動續期。
- API 網關/限流器:結合 Lua、OpenResty 實現接口限流、鑒權等功能。
- WebSocket 代理:支持持久連接轉發,適用于實時通信場景。
三、如何快速開始使用 Nginx?
1. 安裝
Ubuntu:
sudo apt update
sudo apt install nginx
macOS(通過 Homebrew):
brew install nginx
2. 啟動與基本命令
# 啟動 Nginx
sudo nginx# 重載配置(熱更新)
sudo nginx -s reload# 停止 Nginx
sudo nginx -s stop# 檢查配置文件語法
nginx -t
默認配置文件路徑:
- Linux:
/etc/nginx/nginx.conf
- macOS (Homebrew):
/opt/homebrew/etc/nginx/nginx.conf
四、實用玩法案例
1. 將本地應用暴露給公網:靜態站點部署
server {listen 80;server_name mydomain.com;location / {root /var/www/html;index index.html;}
}
2. 反向代理 Node.js 后端
server {listen 80;server_name mydomain.com;location /api/ {proxy_pass http://localhost:3000/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
3. 配置 HTTPS
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/ssl/certs/example.crt;ssl_certificate_key /etc/ssl/private/example.key;location / {proxy_pass http://localhost:8080;}
}
可以使用 Let’s Encrypt + Certbot 自動申請和續期 HTTPS 證書。
五、進階玩法
1. 負載均衡配置
upstream backend {server 127.0.0.1:8080;server 127.0.0.1:8081;
}server {listen 80;location / {proxy_pass http://backend;}
}
支持多種策略:
round-robin
(默認)least_conn
(最少連接)ip_hash
(IP 綁定)
2. 訪問控制
location /admin {allow 192.168.1.0/24;deny all;
}
3. 限流控制
http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {location /api/ {limit_req zone=one burst=5 nodelay;}}
}
六、結合 OpenResty 實現更強功能
Nginx + Lua(OpenResty) 提供超強的可編程能力,可用于:
- 接口限流
- 動態路由
- A/B 測試
- 用戶鑒權
- 日志上報
location /api/check_token {content_by_lua_block {local token = ngx.var.arg_tokenif not token or token ~= "123456" thenngx.status = 403ngx.say("Forbidden")returnendngx.say("OK")}
}
七、調試和性能優化建議
- 使用
access_log
和error_log
調試問題。 - 配置
worker_processes auto;
合理利用 CPU。 - 開啟緩存、Gzip 提升性能。
- 調整
client_max_body_size
限制上傳大小。
八、Nginx 玩出花的建議方向
- 本地搭建 CDN 服務(結合緩存和負載均衡)
- 構建 HTTPS 加密的 WebSocket 通信代理
- 寫 Lua 插件完成防爬蟲、防刷接口邏輯
- 將 Nginx 容器化部署,實現微服務網關(結合 Docker/K8s)
- Nginx + Prometheus + Grafana 實現監控面板