目錄
前言
第一部分:Nginx基礎入門
1.1 什么是Nginx?
1.2 Nginx的典型應用場景
第二部分:Nginx安裝與部署
2.1 在不同操作系統上安裝Nginx
2.2 驗證安裝與基本操作
第三部分:Nginx配置詳解
3.1 核心配置文件解析
3.2 虛擬主機配置
3.3 反向代理與負載均衡
第四部分:Nginx高級功能與模塊
4.1 常用內置模塊
4.2 第三方模塊擴展
第五部分:日常維護與性能優化
5.1 日志管理與分析
5.2 性能調優參數
第六部分:常見問題與解決方案
6.1 配置錯誤排查
6.2 安全加固指南
第七部分:Nginx在云原生與微服務中的應用
7.1 Kubernetes中的Ingress Controller
7.2 微服務網關實踐
結語
前言
Nginx(發音為“Engine-X”)是一款輕量級、高性能的HTTP和反向代理服務器,同時支持郵件協議代理。自2004年由俄羅斯工程師Igor Sysoev發布以來,Nginx憑借其高并發處理能力、低內存占用和靈活的模塊化架構,迅速成為全球最受歡迎的Web服務器之一。無論是中小型網站還是大型互聯網企業(如Netflix、淘寶、騰訊),Nginx都扮演著關鍵角色。本博客將帶您從零開始,逐步深入Nginx的安裝、配置、優化及運維,助您從新手蛻變為專家。
第一部分:Nginx基礎入門
1.1 什么是Nginx?
-
定義與核心功能
Nginx是一個開源的Web服務器,同時支持反向代理、負載均衡、HTTP緩存、SSL/TLS終端等。其事件驅動的異步架構使其能夠輕松處理數萬并發連接。 -
與Apache的對比
-
資源占用:Nginx內存消耗更低,適合高并發場景。
-
處理模型:Apache采用多進程/多線程模型,而Nginx基于事件驅動。
-
擴展性:Nginx模塊需編譯安裝,Apache支持動態加載模塊(DSO)。
-
1.2 Nginx的典型應用場景
-
靜態資源服務:高效托管HTML、CSS、JavaScript、圖片等。
-
反向代理:隱藏后端服務器,提升安全性并實現負載均衡。
-
API網關:路由請求、限流、鑒權。
-
SSL終端:集中管理HTTPS證書。
-
動態內容緩存:加速動態應用響應速度。
-
WebSocket代理:支持實時通信協議。
第二部分:Nginx安裝與部署
2.1 在不同操作系統上安裝Nginx
-
Ubuntu/Debian
sudo apt update sudo apt install nginx systemctl start nginx systemctl enable nginx
-
CentOS/RHEL
sudo yum install epel-release sudo yum install nginx systemctl start nginx
-
源碼編譯安裝(以1.25.1版本為例)
wget https://nginx.org/download/nginx-1.25.1.tar.gz tar -zxvf nginx-1.25.1.tar.gz cd nginx-1.25.1 ./configure --prefix=/usr/local/nginx --with-http_ssl_module make && sudo make install
2.2 驗證安裝與基本操作
-
檢查服務狀態
systemctl status nginx
-
啟動/停止/重啟命令
sudo systemctl restart nginx # 重啟 sudo nginx -s reload # 熱重載配置(不中斷服務)
-
默認目錄結構
-
/etc/nginx/
:配置文件目錄(Linux)。 -
/usr/local/nginx/conf/
:源碼安裝配置路徑。 -
/var/log/nginx/
:訪問日志與錯誤日志。
-
第三部分:Nginx配置詳解
3.1 核心配置文件解析
-
主配置文件:
nginx.conf
user nginx; # 運行用戶 worker_processes auto; # 工作進程數(通常設為CPU核心數) error_log /var/log/nginx/error.log warn; # 錯誤日志級別events {worker_connections 1024; # 單個進程最大連接數use epoll; # 事件驅動模型(Linux) }http {include /etc/nginx/mime.types;default_type application/octet-stream;sendfile on; # 高效文件傳輸模式keepalive_timeout 65; # 長連接超時時間server {listen 80;server_name example.com;location / {root /usr/share/nginx/html;index index.html;}} }
3.2 虛擬主機配置
-
基于域名的虛擬主機
server {listen 80;server_name site1.com;root /var/www/site1; }server {listen 80;server_name site2.com;root /var/www/site2; }
-
基于端口的虛擬主機
server {listen 8080;server_name localhost;root /var/www/port8080; }
3.3 反向代理與負載均衡
-
基礎反向代理配置
location /api/ {proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr; }
-
負載均衡策略
upstream backend {least_conn; # 最小連接數策略server 192.168.1.1:8080 weight=3;server 192.168.1.2:8080;server 192.168.1.3:8080 backup; # 備用服務器 }
第四部分:Nginx高級功能與模塊
4.1 常用內置模塊
-
HTTP Core Module:基礎HTTP功能。
-
HTTP SSL Module:支持HTTPS。
-
HTTP Gzip Module:壓縮響應內容。
-
HTTP Rewrite Module:URL重寫與重定向。
4.2 第三方模塊擴展
-
安裝Lua模塊(OpenResty)
./configure --with-http_lua_module
-
使用ngx_http_geoip_module進行地域限制
geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country {default no;CN yes;US yes; }
第五部分:日常維護與性能優化
5.1 日志管理與分析
-
訪問日志格式定制
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;
-
使用GoAccess實時分析日志
goaccess /var/log/nginx/access.log --log-format=COMBINED
5.2 性能調優參數
-
調整Worker進程與連接數
worker_processes 8; # 等于CPU核心數 worker_connections 4096; # 單個進程最大連接數 multi_accept on; # 同時接受多個連接
-
啟用高效傳輸模式
sendfile on; tcp_nopush on; tcp_nodelay on;
第六部分:常見問題與解決方案
6.1 配置錯誤排查
-
測試配置文件語法
nginx -t
-
典型錯誤示例
-
502 Bad Gateway:后端服務未啟動或防火墻阻止。
-
413 Request Entity Too Large:增加?
client_max_body_size 100M;
-
6.2 安全加固指南
-
隱藏Nginx版本號
server_tokens off;
-
限制敏感路徑訪問
location ~ /\.git {deny all; }
第七部分:Nginx在云原生與微服務中的應用
7.1 Kubernetes中的Ingress Controller
-
部署Nginx Ingress
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
7.2 微服務網關實踐
-
基于Nginx實現路由、熔斷與限流
limit_req_zone $binary_remote_addr zone=one:10m rate=100r/s; location / {limit_req zone=one burst=50;proxy_pass http://microservice; }
結語
通過本篇3萬字的深度解析,您已系統掌握Nginx的安裝、配置、優化及高級應用。無論是構建高可用集群,還是應對千萬級并發場景,Nginx都是您值得信賴的工具。技術的精進永無止境,建議持續關注Nginx官方更新,結合實際業務場景不斷優化實踐。
附錄:Nginx官方文檔、性能測試工具(ab、wrk)、配置生成器推薦。