引言:为什么选择在阿里云上部署Nginx
Nginx作为世界上最流行的Web服务器之一,以其高性能、高并发处理能力和低内存消耗而闻名。在阿里云ECS(弹性计算服务)上部署Nginx,可以充分发挥云计算的弹性伸缩和高可用特性。本指南将从零基础开始,详细讲解如何在阿里云上部署Nginx,并逐步深入到高并发配置和性能优化的实战技巧。
第一部分:阿里云环境准备
1.1 创建阿里云ECS实例
首先,我们需要在阿里云控制台创建一台ECS实例。以下是详细步骤:
登录阿里云控制台
进入ECS管理页面
点击”创建实例”
选择配置:
实例规格:建议至少选择2核4G(如ecs.c6.large)用于生产环境
镜像:推荐选择Ubuntu 20.04或CentOS
7
⁄
8
存储:系统盘建议40GB以上
网络:选择专有网络VPC
安全组:配置80、443端口入方向规则
# 示例:通过阿里云CLI创建实例(需要先安装aliyun-cli)
aliyun ecs CreateInstance \
–RegionId cn-hangzhou \
–ImageId ubuntu_20_04_x64_20G_alibase_20210729.vhd \
–InstanceType ecs.c6.large \
–SecurityGroupId sg-xxxxxxxx \
–VSwitchId vsw-xxxxxxxx \
–SystemDisk.Size 40 \
–InstanceName nginx-server
1.2 配置安全组规则
安全组是阿里云的虚拟防火墙,必须正确配置才能访问Nginx:
在ECS实例详情页,点击”安全组”
添加入方向规则:
协议类型:HTTP,端口范围:80/80,授权对象:0.0.0.0/0
协议类型:HTTPS,端口范围:443/443,授权对象:0.0.0.0/0
协议类型:SSH,端口范围:22/22,授权对象:你的IP地址/32
# 通过CLI添加安全组规则示例
aliyun ecs AuthorizeSecurityGroup \
–SecurityGroupId sg-xxxxxxxx \
–IpProtocol tcp \
–Policy allow \
–Priority 1 \
–SourceCidrIp 0.0.0.0/0 \
–PortRange 80/80
1.3 连接ECS实例
使用SSH客户端连接你的ECS实例:
ssh root@你的ECS公网IP
# 如果使用密钥对登录
ssh -i /path/to/your-key.pem root@你的ECS公网IP
第二部分:Nginx基础安装与配置
2.1 在Ubuntu上安装Nginx
# 更新系统包
sudo apt update
# 安装Nginx
sudo apt install nginx -y
# 启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证Nginx状态
sudo systemctl status nginx
2.2 在CentOS上安装Nginx
# 安装EPEL仓库
sudo yum install epel-release -y
# 安装Nginx
sudo yum install nginx -y
# 启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证Nginx状态
sudo systemctl status nginx
2.3 验证Nginx安装
安装完成后,在浏览器中访问你的ECS公网IP,应该能看到Nginx的欢迎页面。
# 也可以通过命令行验证
curl -I 127.0.0.1
2.4 Nginx基本配置文件结构
Nginx配置文件通常位于
/etc/nginx/
目录下:
/etc/nginx/
├── nginx.conf # 主配置文件
├── conf.d/ # 额外配置文件目录
├── sites-available/ # 可用的站点配置
├── sites-enabled/ # 已启用的站点配置(软链接)
└── snippets/ # 配置片段
关键配置文件示例:
# /etc/nginx/nginx.conf 主配置文件
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
第三部分:Nginx基础配置实战
3.1 配置第一个网站
创建一个简单的静态网站配置:
# 创建网站目录
sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com
# 创建测试页面
sudo nano /var/www/example.com/html/index.html
输入以下内容:
Success! The example.com server block is working!
创建站点配置文件:
sudo nano /etc/nginx/sites-available/example.com
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 访问日志配置
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
启用站点配置:
# 创建软链接到sites-enabled
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
# 测试配置语法
sudo nginx -t
# 重新加载Nginx配置
sudo systemctl reload nginx
3.2 配置反向代理
Nginx常被用作反向代理服务器:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000; # 转发到本地Node.js应用
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
3.3 配置负载均衡
upstream backend {
server 10.0.0.1:8080 weight=3; # 权重为3
server 10.0.0.2:8080;
server 10.0.0.3:8080 backup; # 备用服务器
server 10.0.0.4:8080 down; # 暂时下线
}
server {
listen 80;
server_name loadbalancer.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
第四部分:高并发配置优化
4.1 调整worker进程和连接数
# /etc/nginx/nginx.conf
user www-data;
# 根据CPU核心数自动设置worker_processes
worker_processes auto;
# 设置worker进程的最大连接数
events {
worker_connections 2048;
# 使用epoll事件模型(Linux 2.6+)
use epoll;
# 优化accept锁
multi_accept on;
}
http {
# 连接超时设置
keepalive_timeout 65;
keepalive_requests 1000;
# 缓存打开的文件描述符
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# TCP优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 客户端请求缓冲区
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
# 输出缓冲区
output_buffers 1 32k;
postpone_output 1460;
# Gzip压缩
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/javascript
application/xml+rss
application/json;
# 缓存配置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
# 日志缓冲区
access_log /var/log/nginx/access.log combined buffer=64k flush=1m;
error_log /var/log/nginx/error.log warn;
}
4.2 SSL/TLS优化配置
server {
listen 443 ssl http2;
server_name secure.example.com;
# SSL证书路径
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
# SSL协议和加密套件优化
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会话缓存
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# 安全头
add_header Strict-Transport-Security “max-age=63072000; includeSubDomains; preload”;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection “1; mode=block”;
# 其他配置…
}
4.3 静态资源缓存和压缩
server {
listen 80;
server_name static.example.com;
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
root /var/www/static;
expires 1y;
add_header Cache-Control “public, immutable”;
access_log off;
}
# Gzip压缩特定类型
location ~* \.(js|css|json|xml|html)$ {
gzip on;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml application/json;
gzip_min_length 1000;
}
# 图片优化
location ~* \.(webp|avif)$ {
expires 1y;
add_header Cache-Control “public, immutable”;
}
}
4.4 限流和防DDoS配置
# 限制每个IP每秒最多5个请求
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
# 限制每个IP最多10个并发连接
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
listen 80;
server_name api.example.com;
location / {
# 应用限流
limit_req zone=api_limit burst=10 nodelay;
# 应用并发连接限制
limit_conn addr 10;
# 返回429状态码
limit_req_status 429;
limit_conn_status 429;
proxy_pass http://backend;
}
}
第五部分:性能监控与调优
5.1 启用Nginx状态页
# 在nginx.conf中添加
server {
listen 127.0.0.1:8080;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
访问状态页:
curl http://127.0.0.1:8080/nginx_status
输出示例:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106
5.2 日志分析与监控
# 实时查看访问日志
tail -f /var/log/nginx/access.log
# 统计访问最多的IP
awk ‘{print $1}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
# 统计访问最多的URL
awk ‘{print $7}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
# 统计HTTP状态码
awk ‘{print $9}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr
5.3 使用阿里云监控
在阿里云控制台,可以配置云监控来收集Nginx指标:
进入云监控控制台
创建自定义监控项
配置Agent收集Nginx指标
设置告警规则
# 示例:通过CloudMonitor Agent收集Nginx指标
cat > /etc/aliyun/agent/plugin/nginx.conf <
echo “* hard nofile 65535” >> /etc/security/limits.conf
8.2 调试技巧
# 详细错误日志
error_log /var/log/nginx/error.log debug;
# 使用strace跟踪系统调用
strace -p $(cat /run/nginx.pid) -f
# 检查配置文件语法
nginx -t -c /path/to/nginx.conf
# 查看编译参数
nginx -V
总结
通过本指南,你已经学习了如何在阿里云上从零开始部署Nginx,并掌握了高并发配置和性能优化的关键技术。记住以下要点:
基础部署
:正确配置ECS安全组,安装Nginx,验证服务
高并发优化
:调整worker进程、连接数、缓冲区和缓存
安全加固
:隐藏版本信息、配置访问控制、防止攻击
监控调优
:启用状态页、分析日志、使用阿里云监控
最佳实践
:使用Docker、配合SLB、配置热更新
在生产环境中,建议持续监控Nginx性能指标,根据实际负载情况动态调整配置。同时,保持Nginx和操作系统的安全更新,确保服务稳定运行。