Nginx-full 安装与卸载指南 🚀
本指南详细介绍了 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,定期更新证书。