一、为什么选择Nginx部署Web项目?
在当今高并发互联网环境下,Nginx凭借其轻量级、高并发处理能力和低资源消耗,成为部署Web项目的首选服务器。相比Apache,Nginx在静态资源处理、反向代理和负载均衡方面具有显著优势:
| 对比项 | Nginx | Apache |
|---|---|---|
| 并发连接处理 | 10,000+(异步非阻塞) | 1,000-2,000(多进程/线程) |
| 内存占用 | 2.5MB/连接 | 10MB+/连接 |
| 静态文件处理 | 原生支持,性能极佳 | 需要模块支持 |
| 配置复杂度 | 中等(适合开发者) | 简单(适合运维) |
二、Nginx部署基础配置
1. 安装与基础配置
# Ubuntu系统安装
sudo apt update
sudo apt install nginx
# 启动服务
sudo systemctl start nginx
sudo systemctl enable nginx
# 检查状态
sudo systemctl status nginx
2. 典型项目配置示例
server {
listen 80;
server_name example.com;
root /var/www/myproject;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 静态资源缓存配置
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public";
}
}
三、进阶部署场景
1. HTTPS安全部署
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 其他配置同HTTP示例...
}
2. 负载均衡配置
upstream backend {
server 192.168.1.100:3000 weight=3;
server 192.168.1.101:3000;
server 192.168.1.102:3000 backup;
}
server {
location /api/ {
proxy_pass http://backend;
proxy_next_upstream error timeout invalid_header;
}
}
四、性能优化技巧
关键优化参数:
worker_processes auto;- 自动匹配CPU核心数worker_connections 4096;- 单进程最大连接数keepalive_timeout 65;- 长连接保持时间client_max_body_size 20m;- 上传文件大小限制
Gzip压缩配置
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
五、常见问题解决方案
1. 502 Bad Gateway错误
通常由后端服务不可用导致,检查步骤:
- 确认后端服务是否运行
- 检查防火墙设置
- 查看Nginx错误日志:
tail -f /var/log/nginx/error.log
2. 静态资源404错误
解决方案:
- 确认
root路径配置正确 - 检查文件权限:
chmod -R 755 /var/www/myproject - 验证SELinux状态(CentOS):
setenforce 0临时关闭测试
FAQ常见问题大全
Q1: Nginx和Apache可以同时运行吗?
A1: 可以,但需要配置不同端口(如Nginx 80,Apache 8080)。更推荐的做法是让Nginx作为反向代理处理静态请求,将动态请求转发给Apache。
Q2: 如何配置Nginx支持WebSocket?
A2: 在location配置中添加:
location /ws/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Q3: 如何限制单个IP的访问频率?
A3: 使用limit_req模块:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /api/ {
limit_req zone=one burst=5;
}
}
Q4: 如何配置Nginx支持HTTP/2?
A4: 在listen指令后添加http2参数:
server {
listen 443 ssl http2;
# 其他配置...
}
需确保OpenSSL版本≥1.0.2
Q5: 如何查看Nginx实时访问日志?
A5: 使用以下命令:
tail -f /var/log/nginx/access.log
# 或按时间筛选
journalctl -u nginx --since "1 hour ago" -f
Q6: 如何优雅重启Nginx不中断服务?
A6: 使用reload命令:
sudo nginx -t # 先测试配置
sudo systemctl reload nginx
香港云服务器首购