# Nginx常用配置方法
## 一、Nginx基礎概述
Nginx(發音為"engine x")是一款高性能的HTTP和反向代理服務器,由俄羅斯程序員Igor Sysoev開發。作為輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,Nginx以高并發、低內存占用著稱,全球約32.2%的網站使用Nginx作為Web服務器(數據來源:W3Techs)。
### 核心特性
- 事件驅動架構
- 非阻塞I/O模型
- 熱部署能力
- 負載均衡支持
- 高擴展性
## 二、安裝與基本命令
### 1. 安裝方法(以Ubuntu為例)
```bash
# 添加官方倉庫
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
# 安裝Nginx
sudo apt update
sudo apt install nginx
# 啟動服務
sudo systemctl start nginx
# 停止服務
sudo systemctl stop nginx
# 重啟服務(加載新配置)
sudo systemctl restart nginx
# 重新加載配置(不中斷服務)
sudo systemctl reload nginx
# 查看狀態
sudo systemctl status nginx
# 設置開機啟動
sudo systemctl enable nginx
Nginx配置文件通常位于/etc/nginx/nginx.conf
,主要包含三個上下文塊:
main # 全局配置(影響所有模塊)
events # 事件處理配置
http # HTTP服務器配置
典型配置層次:
http {
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}
}
server {
listen 80;
server_name example.com;
root /var/www/example;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# 禁止訪問隱藏文件
location ~ /\. {
deny all;
}
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream backend {
server 192.168.1.100:8000 weight=3;
server 192.168.1.101:8000;
server 192.168.1.102:8000 backup;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend;
}
}
支持算法: - 輪詢(默認) - 加權輪詢 - IP哈希 - 最少連接
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
ssl_prefer_server_ciphers on;
location / {
root /var/www/html;
index index.html;
}
}
# HTTP強制跳轉HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
location /admin/ {
# 基礎認證
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.htpasswd;
# IP白名單
allow 192.168.1.0/24;
allow 10.0.0.1;
deny all;
}
生成密碼文件:
printf "username:$(openssl passwd -apr1)" > /etc/nginx/.htpasswd
events {
worker_connections 1024; # 每個worker最大連接數
multi_accept on; # 同時接受多個連接
use epoll; # Linux高性能事件模型
}
http {
sendfile on; # 啟用零拷貝傳輸
tcp_nopush on; # 優化數據包發送
tcp_nodelay on; # 禁用Nagle算法
keepalive_timeout 65; # 保持連接超時
}
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
# 靜態資源緩存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
# 代理緩存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
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;
}
創建/etc/logrotate.d/nginx
:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
server {
# 禁用server tokens
server_tokens off;
# 防止點擊劫持
add_header X-Frame-Options "SAMEORIGIN";
# XSS防護
add_header X-XSS-Protection "1; mode=block";
# 內容安全策略
add_header Content-Security-Policy "default-src 'self'";
}
location /api/ {
limit_except GET POST {
deny all;
}
}
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
}
# 測試配置語法
sudo nginx -t
# 查看加載的配置文件路徑
sudo nginx -T
/var/log/nginx/error.log
(默認路徑)error_log
指令自定義路徑# 查看活躍連接
netstat -anp | grep nginx
# 查看進程狀態
top -p $(pgrep nginx | tr '\n' ',' | sed 's/,$//')
location /ws/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/example;
}
}
server {
listen 80;
server_name blog.example.com;
location / {
proxy_pass http://localhost:2368;
}
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
internal;
}
本文涵蓋了Nginx從基礎安裝到高級配置的多個方面,包括: 1. 靜態資源服務配置 2. 反向代理與負載均衡 3. HTTPS安全配置 4. 性能優化技巧 5. 安全加固方案 6. 常見問題排查方法
實際生產環境中,建議:
- 使用nginx -t
測試所有配置變更
- 通過灰度發布逐步應用重大修改
- 定期檢查錯誤日志和訪問日志
- 保持Nginx版本更新以獲得安全補丁
通過合理配置,Nginx可以輕松應對高并發場景,成為現代Web架構中不可或缺的組件。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。