Nginx-full 安装与卸载指南 🚀

Nginx Server

本指南详细介绍了 Nginx Web 服务器的完整生命周期管理,包括安装、配置优化、日常维护、故障排除以及完全卸载。
nginx-full 版本包含 http_dav_module 模块,适合搭建 WebDAV 服务


✨ 目录


🌟 Nginx 简介

Nginx (发音为 “engine-x”) 是一个高性能的 HTTP 和反向代理服务器,以其稳定性、丰富的功能集、简单的配置文件和低资源消耗而闻名。它由 Igor Sysoev 创建,最初是为俄罗斯的大型网站 Rambler.ru 开发的。

🎯 Nginx 主要特性:

  • 高性能: 事件驱动的异步架构,能够处理大量并发连接
  • 负载均衡: 内置多种负载均衡算法
  • 反向代理: 强大的反向代理功能
  • 缓存加速: 静态内容缓存和动态内容加速
  • 高可靠性: 极低的故障率和强大的故障转移能力
  • 模块化设计: 丰富的模块生态系统

📊 Nginx 与 Apache 对比:

特性 Nginx Apache
架构 事件驱动 进程/线程驱动
内存使用 较低 较高
并发处理 优秀 良好
静态内容 极快
动态内容 通过 FastCGI 原生支持
配置语法 简洁 较复杂

📦 一、Nginx 安装指南

1️⃣ Ubuntu/Debian 系统的安装方法

Ubuntu/Debian 系统

1
2
3
4
5
# 更新软件包列表
sudo apt update

# 安装 nginx-full(包含 WebDAV 等完整模块)
sudo apt install nginx-full -y

从源码编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装编译依赖
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y

# 下载最新源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0

# 配置编译选项
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_dav_module

# 编译并安装
make
sudo make install

2️⃣ 验证安装

1
2
3
4
5
6
7
8
9
# 检查 Nginx 版本
nginx -v

# 查看编译参数
nginx -V

# 检查安装文件位置
which nginx
whereis nginx

3️⃣ 服务管理

1
2
3
4
5
6
7
8
9
10
11
# 启动 Nginx 服务
sudo systemctl start nginx

# 检查服务状态
sudo systemctl status nginx

# 设置开机自启
sudo systemctl enable nginx

# 重新加载系统守护进程
sudo systemctl daemon-reload

4️⃣ 防火墙配置

1
2
3
4
5
6
7
8
# 允许 HTTP 和 HTTPS 流量
sudo ufw allow 'Nginx Full'
# 或者分别允许
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 检查防火墙状态
sudo ufw status

5️⃣ 验证安装成功

1
2
3
4
5
6
7
8
9
# 检查 Nginx 是否正在运行
ps aux | grep nginx

# 检查端口监听情况
sudo netstat -tulnp | grep :80
sudo ss -tulnp | grep :80

# 测试访问
curl -I http://localhost

6️⃣ 升级 Nginx

1
2
3
4
5
# Ubuntu/Debian 系统
sudo apt update && sudo apt upgrade nginx -y

# 重启服务使升级生效
sudo systemctl restart nginx

⚙️ 二、Nginx 维护命令

1️⃣ 服务管理命令

命令 说明 使用场景
sudo systemctl start nginx 启动 Nginx 服务 初次安装后
sudo systemctl stop nginx 停止 Nginx 服务 维护前
sudo systemctl restart nginx 重启 Nginx 服务 配置更改后
sudo systemctl reload nginx 重载配置(不中断服务) 修改配置后
sudo systemctl status nginx 查看服务状态 日常检查
sudo systemctl enable nginx 设置开机自启 系统启动配置
sudo systemctl disable nginx 禁用开机自启 临时禁用

2️⃣ 配置检查与验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 测试配置文件语法
sudo nginx -t

# 测试特定配置文件
sudo nginx -t -c /etc/nginx/nginx.conf

# 查看完整配置
sudo nginx -T

# 查看包含的模块
nginx -V 2>&1 | grep -- '--with-'

# 检查配置文件结构
sudo nginx -T | grep -E "^(http|server|location)"

3️⃣ 进程管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 优雅停止(处理完当前请求)
sudo nginx -s quit

# 立即停止
sudo nginx -s stop

# 重新加载配置
sudo nginx -s reload

# 重新打开日志文件
sudo nginx -s reopen

# 查看主进程ID
cat /var/run/nginx.pid

# 查看所有Nginx进程
ps aux | grep nginx
pgrep -lf nginx

4️⃣ 日志管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看错误日志(实时监控)
sudo tail -f /var/log/nginx/error.log

# 查看访问日志(实时监控)
sudo tail -f /var/log/nginx/access.log

# 查看特定时间段的日志
sudo grep "25/May/2023" /var/log/nginx/access.log

# 使用 journalctl 查看系统日志
sudo journalctl -u nginx --since today
sudo journalctl -u nginx --since "2023-05-25" --until "2023-05-26"

# 日志轮转配置
sudo nano /etc/logrotate.d/nginx

# 手动执行日志轮转
sudo logrotate -f /etc/logrotate.d/nginx

5️⃣ 系统检查与监控

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 检查服务是否启用
sudo systemctl is-enabled nginx

# 检查端口占用情况
sudo netstat -tulnp | grep :80
sudo ss -tulnp | grep :80
sudo lsof -i :80

# 检查配置文件语法
sudo find /etc/nginx -name "*.conf" -exec nginx -t -c {} \;

# 重新加载 bash 配置
source ~/.bashrc

# 检查磁盘空间
df -h /var/log/nginx/

6️⃣ 连接和性能检查

1
2
3
4
5
6
7
8
9
10
11
# 查看当前连接数
netstat -an | grep :80 | wc -l

# 查看Nginx状态(需要启用stub_status模块)
curl http://localhost/nginx_status

# 查看工作进程状态
sudo watch -n 1 "ps aux --sort=-%cpu | grep nginx"

# 监控内存使用
sudo watch -n 1 "free -h && echo '---' && ps aux --sort=-%mem | head -10"

🗑️ 三、Nginx 卸载指南

1️⃣ 不同系统的卸载方法

Ubuntu/Debian 系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 停止Nginx服务
sudo systemctl stop nginx

# 禁用开机启动
sudo systemctl disable nginx

# 基本卸载(保留配置文件)
sudo apt remove nginx -y

# 彻底卸载(删除配置文件)
sudo apt remove --purge nginx -y

# 清理nginx-full版本
sudo apt remove --purge nginx-full -y
sudo apt autoremove --purge -y

CentOS/RHEL 系统

1
2
3
4
5
6
7
8
9
10
11
12
# 停止服务
sudo systemctl stop nginx

# 禁用开机启动
sudo systemctl disable nginx

# 卸载Nginx
sudo yum remove nginx -y

# 清理残留文件
sudo rm -rf /etc/nginx
sudo rm -rf /var/log/nginx

2️⃣ 清理残留文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 删除配置文件和日志
sudo rm -rf /etc/nginx/
sudo rm -rf /var/log/nginx/
sudo rm -rf /var/cache/nginx/

# 删除网站文件(谨慎操作!)
sudo rm -rf /var/www/html/

# 删除启动脚本
sudo rm -f /etc/init.d/nginx
sudo rm -f /lib/systemd/system/nginx.service

# 删除符号链接
sudo rm -f /usr/sbin/nginx

3️⃣ 源码安装的卸载

1
2
3
4
5
6
7
# 如果是从源码编译安装
cd /path/to/nginx/source
sudo make uninstall

# 或者手动删除
sudo rm -rf /usr/local/nginx
sudo rm -f /usr/bin/nginx

4️⃣ 验证卸载结果

1
2
3
4
5
6
7
8
9
# 检查是否已卸载
which nginx
nginx -v

# 检查是否还有进程运行
ps aux | grep nginx

# 检查端口是否释放
sudo netstat -tulnp | grep :80

5️⃣ 备份重要数据(卸载前)

1
2
3
4
5
6
7
8
# 备份配置文件
sudo tar -czf nginx-backup-$(date +%Y%m%d).tar.gz /etc/nginx/

# 备份网站数据
sudo tar -czf website-backup-$(date +%Y%m%d).tar.gz /var/www/html/

# 备份日志文件(可选)
sudo tar -czf nginx-logs-backup-$(date +%Y%m%d).tar.gz /var/log/nginx/

🔧 四、故障排除技巧

1️⃣ 端口冲突解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查找占用80端口的进程
sudo lsof -i :80
sudo netstat -tulnp | grep :80
sudo ss -tulnp | grep :80

# 终止特定进程
sudo kill -9 <PID>

# 或者使用pkill
sudo pkill -9 nginx

# 检查其他可能占用端口的服务
sudo systemctl stop apache2 # 如果安装了Apache
sudo systemctl stop lighttpd # 如果安装了Lighttpd

2️⃣ 权限问题修复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 修复文件权限
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

# 修复日志文件权限
sudo chown -R www-data:www-data /var/log/nginx
sudo chmod -R 755 /var/log/nginx

# 检查SELinux状态(CentOS/RHEL)
sudo sestatus
sudo setsebool -P httpd_can_network_connect 1

# 检查AppArmor状态(Ubuntu)
sudo aa-status

3️⃣ 配置错误调试

1
2
3
4
5
6
7
8
9
10
11
# 详细错误信息
sudo nginx -t 2>&1 | grep error

# 检查特定配置段
sudo grep -n "server_name" /etc/nginx/sites-enabled/*

# 查看完整的错误信息
sudo nginx -t 2>&1 | tee /tmp/nginx-test.log

# 使用调试模式
sudo nginx -t -c /etc/nginx/nginx.conf --debug

4️⃣ 常见错误解决

502 Bad Gateway 错误

1
2
3
4
5
6
7
8
9
10
# 检查后端服务状态
sudo systemctl status php-fpm # 如果是PHP应用
sudo systemctl status tomcat # 如果是Java应用

# 检查Socket权限
ls -la /var/run/php/php-fpm.sock

# 调整FastCGI超时设置
# 在Nginx配置中添加:
# fastcgi_read_timeout 300;

403 Forbidden 错误

1
2
3
4
5
6
7
8
# 检查目录权限
ls -la /var/www/html/

# 检查index文件是否存在
ls -la /var/www/html/index.*

# 检查SELinux/AppArmor
sudo ausearch -m avc --start recent # 查看SELinux拒绝记录

404 Not Found 错误

1
2
3
4
5
6
7
8
# 检查root目录设置
sudo nginx -T | grep -A5 -B5 "root"

# 检查文件是否存在
sudo find /var/www -name "index.*"

# 检查try_files配置
sudo nginx -T | grep -A3 -B3 "try_files"

5️⃣ 日志分析技巧

1
2
3
4
5
6
7
8
9
10
11
# 实时监控错误日志
sudo tail -f /var/log/nginx/error.log | grep -E "(error|emerg|crit)"

# 分析访问日志中的错误
sudo awk '$9 >= 400 {print $0}' /var/log/nginx/access.log

# 查看最常见的错误页面
sudo awk '$9 >= 400 {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

# 分析慢请求
sudo awk '{if ($NF > 5) print $0}' /var/log/nginx/access.log | sort -k10 -nr

🚀 五、性能优化建议

1️⃣ 工作进程优化

1
2
3
4
5
6
7
8
9
10
# 在 /etc/nginx/nginx.conf 中设置
worker_processes auto; # 自动检测CPU核心数
worker_cpu_affinity auto; # CPU亲和性设置
worker_rlimit_nofile 100000; # 工作进程文件描述符限制

events {
worker_connections 4096; # 每个工作进程的最大连接数
multi_accept on; # 同时接受多个新连接
use epoll; # 使用epoll事件模型(Linux)
}

2️⃣ 缓冲区和超时优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
http {
# 缓冲区优化
client_body_buffer_size 128k;
client_max_body_size 20m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

# 超时设置
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;

# TCP优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}

3️⃣ 启用 Gzip 压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/json
application/javascript
application/xml+rss
application/atom+xml
image/svg+xml;

4️⃣ 配置缓存策略

1
2
3
4
5
6
7
8
9
10
11
12
13
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, immutable";
add_header Pragma "public";
add_header Vary "Accept-Encoding";
}

# 禁止缓存配置
location ~* \.(php|cgi|pl|py)$ {
expires off;
add_header Cache-Control "no-store, no-cache, must-revalidate";
}

5️⃣ 连接限制和请求频率控制

1
2
3
4
5
6
7
8
9
10
11
# 限制连接频率
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 100;

# 限制请求频率
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

location /api/ {
limit_req zone=one burst=20 nodelay;
proxy_pass http://backend;
}

6️⃣ 内核参数优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 编辑 /etc/sysctl.conf
echo '
# 最大文件描述符
fs.file-max = 1000000

# TCP优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200

# 内存优化
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
' | sudo tee -a /etc/sysctl.conf

# 应用配置
sudo sysctl -p

📊 六、监控与统计

1️⃣ 实时监控命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看实时连接数
sudo ngxtop

# 或者使用自定义命令
watch -n 1 "echo '当前连接数:' && netstat -an | grep :80 | wc -l"

# 监控Nginx进程资源使用
sudo htop -p $(pgrep nginx | tr '\n' ',')

# 实时监控访问日志
sudo tail -f /var/log/nginx/access.log | awk '
{
print strftime("%Y-%m-%d %H:%M:%S"), $1, $7, $9, $NF "s"
}'

2️⃣ 性能统计和分析

1
2
3
4
5
6
7
8
9
10
11
# 查看Nginx进程状态
sudo ps aux --sort=-%cpu | grep nginx

# 查看内存使用情况
sudo pmap $(pgrep nginx | head -1) | tail -1

# 使用vmstat监控系统性能
vmstat 1 10

# 使用iostat监控磁盘IO
iostat -dx 1

3️⃣ 启用状态监控模块

1
2
3
4
5
6
7
8
9
10
11
12
# 在Nginx配置中添加
server {
listen 80;
server_name localhost;

location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}

4️⃣ 使用第三方监控工具

1
2
3
4
5
6
7
8
9
10
11
# 安装GoAccess(实时日志分析)
sudo apt install goaccess -y

# 实时监控访问日志
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --real-time-html

# 使用iftop监控网络流量
sudo iftop -P -i eth0

# 使用nethogs监控进程网络使用
sudo nethogs eth0

5️⃣ 日志分析脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# nginx-log-analyzer.sh

LOG_FILE="/var/log/nginx/access.log"

echo "=== Nginx 访问日志分析 ==="
echo "分析时间: $(date)"
echo "日志文件: $LOG_FILE"
echo ""

# 总请求数
TOTAL_REQUESTS=$(wc -l < "$LOG_FILE")
echo "总请求数: $TOTAL_REQUESTS"

# 成功请求(2xx/3xx)
SUCCESS_REQUESTS=$(awk '$9 ~ /^[23][0-9][0-9]$/ {count++} END {print count}' "$LOG_FILE")
SUCCESS_RATE=$(echo "scale=2; $SUCCESS_REQUESTS * 100 / $TOTAL_REQUESTS" | bc)
echo "成功请求率: $SUCCESS_RATE%"

# 错误请求(4xx/5xx)
ERROR_REQUESTS=$(awk '$9 ~ /^[45][0-9][0-9]$/ {count++} END {print count}' "$LOG_FILE")
ERROR_RATE=$(echo "scale=2; $ERROR_REQUESTS * 100 / $TOTAL_REQUESTS" | bc)
echo "错误请求率: $ERROR_RATE%"

# 最频繁的访问IP
echo ""
echo "前10个最频繁访问的IP:"
awk '{print $1}' "$LOG_FILE" | sort | uniq -c | sort -nr | head -10

# 最受欢迎的页面
echo ""
echo "前10个最受欢迎的页面:"
awk '{print $7}' "$LOG_FILE" | sort | uniq -c | sort -nr | head -10

🛡️ 七、安全最佳实践

1️⃣ 基础安全加固

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 隐藏Nginx版本号
server_tokens off;

# 防止点击劫持
add_header X-Frame-Options "SAMEORIGIN";

# 启用XSS保护
add_header X-XSS-Protection "1; mode=block";

# 防止MIME类型嗅探
add_header X-Content-Type-Options "nosniff";

# 启用HSTS(HTTPS强制)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

2️⃣ 访问控制和限制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 限制请求方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}

# 禁止敏感文件访问
location ~ /\.(ht|git|svn) {
deny all;
return 404;
}

# 限制特定文件类型的访问
location ~* \.(log|txt|conf|sql|bak)$ {
deny all;
return 403;
}

3️⃣ SSL/TLS 安全配置

1
2
3
4
5
6
7
8
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

4️⃣ 防止常见攻击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 防止DDoS攻击
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

# 防止SQL注入
set $block_sql_injections 0;
if ($query_string ~ "union.*select.*\(") {
set $block_sql_injections 1;
}
if ($block_sql_injections = 1) {
return 403;
}

# 防止目录遍历
if ($request_uri ~ "\.\./") {
return 403;
}

5️⃣ 安全头设置

1
2
3
4
5
6
7
8
9
10
11
# 内容安全策略
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com; style-src 'self' 'unsafe-inline' https://cdn.example.com;";

# 权限策略头
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()";

# 推荐人策略
add_header Referrer-Policy "strict-origin-when-cross-origin";

# 特性策略
add_header Feature-Policy "geolocation 'none'; microphone 'none'; camera 'none'";

6️⃣ 文件和目录权限

1
2
3
4
5
6
7
8
9
10
11
12
# 设置正确的文件权限
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;

# 保护配置文件
sudo chmod 600 /etc/nginx/nginx.conf
sudo chmod 600 /etc/nginx/sites-available/*

# 保护SSL证书
sudo chmod 600 /etc/ssl/private/*
sudo chmod 644 /etc/ssl/certs/*

💡 八、实用技巧

1️⃣ 快速测试配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建测试配置
cat > test.conf << 'EOF'
server {
listen 8080;
server_name test.local;
return 200 "Test successful!\n";
}
EOF

# 测试配置
sudo nginx -t -c test.conf

# 临时运行测试配置
sudo nginx -c $(pwd)/test.conf

# 测试完毕后停止
sudo nginx -s stop -c $(pwd)/test.conf

2️⃣ 备份和版本控制

1
2
3
4
5
6
7
8
9
10
11
12
# 备份现有配置
sudo tar -czf nginx-backup-$(date +%Y%m%d).tar.gz /etc/nginx/

# 使用git进行配置版本控制
sudo mkdir /etc/nginx/.git
sudo git -C /etc/nginx/ init
sudo git -C /etc/nginx/ add .
sudo git -C /etc/nginx/ commit -m "Initial nginx config"

# 每次修改后提交
sudo git -C /etc/nginx/ add .
sudo git -C /etc/nginx/ commit -m "修改配置描述"

3️⃣ 批量操作和管理

1
2
3
4
5
6
7
8
9
10
11
# 批量重载所有Nginx配置
sudo find /etc/nginx/conf.d/ -name "*.conf" -exec sudo nginx -t -c {} \;

# 批量检查语法错误
for config in /etc/nginx/sites-enabled/*; do
echo "检查配置: $config"
sudo nginx -t -c "$config" 2>&1 | grep -E "(error|emerg|crit)"
done

# 批量备份配置文件
sudo tar -czf nginx-config-$(date +%Y%m%d).tar.gz /etc/nginx/conf.d/ /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

4️⃣ 性能测试工具

1
2
3
4
5
6
7
8
9
10
11
# 安装性能测试工具
sudo apt install apache2-utils -y

# 压力测试
ab -n 1000 -c 100 http://localhost/

# 使用wrk进行更高级测试
wrk -t12 -c400 -d30s http://localhost/

# 使用siege进行长时间测试
siege -c100 -t1M http://localhost/

5️⃣ 日志分析和监控

1
2
3
4
5
6
7
8
9
10
11
# 实时错误监控
sudo tail -f /var/log/nginx/error.log | grep -E --color=auto "(error|emerg|crit)"

# 统计HTTP状态码
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

# 分析慢请求
awk '($NF > 5){print $7, $NF}' /var/log/nginx/access.log | sort -k2 -rn | head -20

# 生成访问报告
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED

6️⃣ 自动化脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
# nginx-manager.sh

case "$1" in
start)
sudo systemctl start nginx
echo "Nginx started"
;;
stop)
sudo systemctl stop nginx
echo "Nginx stopped"
;;
restart)
sudo systemctl restart nginx
echo "Nginx restarted"
;;
reload)
sudo systemctl reload nginx
echo "Nginx reloaded"
;;
status)
sudo systemctl status nginx
;;
test)
sudo nginx -t
;;
monitor)
watch -n 1 "echo '连接数:' && netstat -an | grep :80 | wc -l && echo '内存使用:' && ps aux | grep nginx | grep -v grep | awk '{print \$4}'"
;;
*)
echo "Usage: $0 {start|stop|restart|reload|status|test|monitor}"
exit 1
;;
esac

7️⃣ Docker 容器化部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 使用官方Nginx镜像
docker run -d \
--name nginx \
-p 80:80 \
-p 443:443 \
-v /path/to/nginx.conf:/etc/nginx/nginx.conf \
-v /path/to/html:/usr/share/nginx/html \
nginx:latest

# 使用Docker Compose
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./html:/usr/share/nginx/html
restart: unless-stopped
EOF

通过这份完整的 Nginx 管理指南,您应该能够熟练地安装、配置、维护、优化和卸载 Nginx 服务器。记得在生产环境中操作前总是备份重要配置!🎯

📚 扩展资源

❓ 常见问题解答

Q: Nginx 和 Apache 哪个更好?
A: 这取决于具体需求。Nginx 更适合高并发场景,Apache 更适合需要大量模块的动态内容处理。

Q: 如何解决 502 Bad Gateway 错误?
A: 检查后端服务(如 PHP-FPM、Tomcat)是否正常运行,检查代理配置和超时设置。

Q: Nginx 性能优化的关键点是什么?
A: 工作进程数、连接数限制、缓冲区和缓存设置、Gzip 压缩、内核参数调优。

Q: 如何防止 DDoS 攻击?
A: 使用 limit_req 和 limit_conn 模块限制请求频率,配置防火墙规则,使用 Cloudflare 等 CDN 服务。

Q: SSL 证书配置要注意什么?
A: 使用强密码套件,启用 HSTS,配置 OCSP Stapling,定期更新证书。