CentOS 7 从零搭建Nginx服务器极简指南
nginx作为当今火爆的、高性能的http及反向代理服务,已在很多场景下必不可少。本文分析到Nginx服务运行的完整流程,包含极简配置文件和关键参数详解。
一、Nginx极简安装
1.1 添加官方源并安装
# 安装Nginx官方源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装Nginx
yum install -y nginx
# 启动并设置开机自启
systemctl start nginx
systemctl enable nginx
# 查看状态(active表示正常)
systemctl status nginx
1.2 防火墙配置
# 开放80端口(HTTP)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
# 验证:浏览器访问 http://服务器IP,应看到Nginx欢迎页
1.3 SELinux设置(推荐禁用)
# 临时禁用
setenforce 0
# 永久禁用
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
二、极简Nginx配置示例
2.1 主配置文件:/etc/nginx/nginx.conf
user nginx; # 运行用户
worker_processes auto; # 自动根据CPU核心数设置
error_log /var/log/nginx/error.log warn; # 错误日志
pid /var/run/nginx.pid; # PID文件
events {
worker_connections 1024; # 每个worker的最大连接数
use epoll; # Linux高性能事件模型
}
http {
include /etc/nginx/mime.types; # MIME类型
default_type application/octet-stream; # 默认类型
# 访问日志格式
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;
sendfile on; # 开启高效文件传输
keepalive_timeout 65; # 长连接超时时间
# 虚拟主机配置
server {
listen 80; # 监听端口
server_name localhost; # 域名或IP
root /usr/share/nginx/html; # 网站根目录
index index.html index.htm; # 默认首页
location / {
try_files $uri $uri/ =404; # 静态文件查找规则
}
}
}
2.2 验证配置并重启
# 检查配置语法
nginx -t
# 重载配置(不影响运行)
nginx -s reload
三、常见配置项详解
3.1 核心性能配置
| 配置项 | 说明 | 推荐值 |
|---|---|---|
worker_processes |
worker进程数,通常等于CPU核心数 |
auto 或 4
|
worker_connections |
每个worker的最大连接数 |
1024 或 2048
|
use epoll |
Linux下最佳事件驱动模型 | epoll |
sendfile on |
开启零拷贝传输,提升静态文件性能 | on |
keepalive_timeout |
HTTP长连接保持时间 | 65s |
3.2 静态文件服务配置
location /static {
root /data/www; # 文件存放路径
expires 7d; # 缓存7天
gzip on; # 开启gzip压缩
gzip_types text/plain text/css application/json; # 压缩类型
}
参数解释:
- root: 指定文件根目录,URL路径会追加到root后
- expires: 设置浏览器缓存时间
- gzip: 压缩传输,减少带宽占用(通常可节省50%-70%)
3.3 反向代理配置
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:8080; # 后端服务地址
proxy_set_header Host $host; # 传递原始Host头
proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 75s;
proxy_read_timeout 400s;
}
}
关键header说明:
- X-Real-IP: 后端服务器获取真实客户端IP
- X-Forwarded-For: 记录完整代理链路IP
- Host: 确保后端服务识别原始域名
3.4 负载均衡配置
# 定义后端服务器池
upstream backend {
# 负载均衡策略:ip_hash/least_conn/weight
server 192.168.1.101:8080 weight=3; # 权重3
server 192.168.1.102:8080 weight=2; # 权重2
server 192.168.1.103:8080 backup; # 备份服务器
}
server {
listen 80;
location / {
proxy_pass http://backend; # 使用upstream名称
}
}
负载均衡策略:
- 轮询(默认): 平均分配请求
- weight: 加权轮询,权重越高分配越多
- ip_hash: 同一IP固定到同一后端(保持会话)
- least_conn: 优先分配给连接数最少的后端
- backup: 其他服务器宕机时才启用
四、验证与排错
4.1 服务检查命令
# 检查Nginx是否运行
systemctl status nginx
netstat -tlnp | grep 80
# 查看访问日志
tail -f /var/log/nginx/access.log
# 查看错误日志
tail -f /var/log/nginx/error.log
# 测试配置文件
nginx -t
4.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 无法访问Nginx | 防火墙/SELinux拦截 | 开放80端口,禁用SELinux |
| 403 Forbidden | 文件权限不足 | chown -R nginx:nginx /网站目录 |
| 502 Bad Gateway | 后端服务不可用 | 检查proxy_pass地址和端口 |
| 配置不生效 | 未重载配置 | 执行 nginx -s reload
|
通过以上步骤,就可以在CentOS 7上完成Nginx的从零搭建和极简配置。