在华为云 EulerOS 2.0 (基于 CentOS/RHEL 体系) 上部署 Nginx,最稳妥且符合生产环境规范的做法是通过官方 YUM 源安装稳定版,而不是去官网下载源码包编译(除非你有特殊的模块需求)。
以下是经过验证的标准操作流程,分为“一键脚本版”和“手动详解版”,建议生产环境参考手动版的逻辑。
一、 前置准备:安全组与系统更新
EulerOS 默认防火墙策略较严,且华为云 ECS 实例需要在控制台开启端口。
-
配置安全组(Security Group)
- 登录华为云控制台 -> 计算服务 -> 弹性云服务器 -> 找到你的实例 -> 点击“安全组”。
- 入方向规则添加:
- 协议:TCP
- 端口范围:80, 443
- 源地址:0.0.0.0/0(或指定 IP 段)
-
系统基础优化
# 更新所有系统包到最新状态 sudo yum update -y # 安装常用工具(如果缺失) sudo yum install -y vim wget curl net-tools
二、 安装 Nginx(推荐方式:YUM 源)
EulerOS 2.0 的官方仓库中通常包含 Nginx,但版本可能不是最新的。如果你需要最新特性,可以添加官方 Nginx 源;如果追求稳定性,直接用系统源即可。
方法 A:使用系统默认源(简单、稳定)
# 1. 安装 Nginx
sudo yum install -y nginx
# 2. 启动 Nginx 并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 3. 检查状态
systemctl status nginx
注意:此时访问
http://<你的ECS公网IP>,应该能看到 “Welcome to nginx!” 页面。
方法 B:使用 Nginx 官方源(获取最新版,如 1.24+)
如果你需要特定新版本或 HTTP/3 支持,建议添加官方源:
# 1. 创建 Nginx 官方 repo 文件
sudo tee /etc/yum.repos.d/nginx.repo <<'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
# 2. 导入 GPG Key
sudo rpm --import https://nginx.org/keys/nginx_signing.key
# 3. 安装
sudo yum install -y nginx
# 4. 启动并设为开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
三、 核心配置详解
Nginx 的主配置文件位于 /etc/nginx/nginx.conf,站点配置通常在 /etc/nginx/conf.d/ 目录下。
1. 修改主配置文件 (/etc/nginx/nginx.conf)
重点调整用户、工作模式和日志路径:
user nginx; # 确保运行用户存在,EulerOS 默认已创建
worker_processes auto; # 自动匹配 CPU 核心数
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;
events {
worker_connections 1024; # 根据业务量可适当调高,如 4096
}
http {
include /etc/nginx/mime.types;
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;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# 引入虚拟主机配置
include /etc/nginx/conf.d/*.conf;
}
2. 创建站点配置 (/etc/nginx/conf.d/default.conf)
以 HTTPS 为例(生产环境必备):
server {
listen 80;
server_name your_domain.com; # 替换为你的域名或IP
# HTTP 强制跳转 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name your_domain.com;
# SSL 证书路径(需提前上传证书到服务器)
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
# 安全头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
# API 反向XX示例
location /api/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
提示:如果使用 Let’s Encrypt 免费证书,可配合 Certbot 自动化管理。
四、 防火墙与 SELinux 配置(关键!)
EulerOS 默认启用 firewalld 和 SELinux,很多新手在这里卡住。
1. 配置 Firewalld
# 永久开放 80 和 443 端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 重载防火墙
sudo firewall-cmd --reload
# 验证
sudo firewall-cmd --list-all
2. 处理 SELinux(可选但推荐)
如果不想关闭 SELinux(出于安全考虑),需要允许 Nginx 网络访问:
# 查看当前 SELinux 状态
sestatus
# 如果 Enforcing,允许 Nginx 绑定非标准端口或进行网络操作
sudo setsebool -P httpd_can_network_connect 1
# 如果需要 Nginx 读取其他目录内容,需调整上下文
# chcon -Rt httpd_sys_content_t /path/to/your/webroot
懒人做法:测试环境可直接关闭 SELinux:
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config sudo setenforce 0
五、 验证与排错
-
测试配置文件语法
sudo nginx -t输出
syntax is ok和test is successful后再重启。 -
重启 Nginx
sudo systemctl restart nginx -
检查进程与端口
ps -ef | grep nginx ss -tlnp | grep :80 ss -tlnp | grep :443 -
从外部访问
使用浏览器访问https://<你的公网IP>或域名,确认是否正常加载。
六、 常见问题排查(FAQ)
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 403 Forbidden | 权限不足或索引文件缺失 | 检查 root 目录权限:chmod -R 755 /usr/share/nginx/html;确保有 index.html |
| 502 Bad Gateway | 后端服务未启动或端口错误 | 检查 proxy_pass 指向的后端服务是否运行,端口是否正确 |
| 连接超时 | 安全组未放行或防火墙拦截 | 双重检查华为云控制台安全组和服务器内 firewall-cmd |
| 无法写入日志 | SELinux 限制 | 执行 setsebool -P httpd_write_content 1 或检查日志目录权限 |
七、 进阶建议(生产环境)
- 使用 systemd 管理:务必使用
systemctl而非直接调用nginx命令,便于日志管理和故障恢复。 - 日志轮转:EulerOS 自带
logrotate配置,无需额外设置,定期清理旧日志。 - 性能调优:在高并发场景下,调整
/etc/security/limits.conf中的nofile参数,避免 “Too many open files” 错误。 - 监控集成:结合 Prometheus + Node Exporter + Nginx Plus/OpenResty 模块,实现流量监控。
以上流程适用于华为云 EulerOS 2.0 SP1/SP2/SP3 等主流版本。如遇特殊报错,请优先查看 /var/log/nginx/error.log 获取具体错误码。
云技术博客