在 EulerOS 2.0(基于 CentOS 7 / RHEL 7 兼容内核,使用 systemd)中启动并设置 Nginx 开机自启,需按以下步骤操作。EulerOS 2.0 默认未预装 Nginx,因此需先确认是否已安装;若未安装,请先部署。
✅ 前提检查:确认 Nginx 已正确安装
EulerOS 2.0 官方源中默认不包含 Nginx(因安全策略和软件包策略),通常需通过以下方式之一安装:
方式一:使用华为官方源(推荐)
# 查看可用仓库(确认是否有 euler-os 或 appstream 等)
yum repolist
# 若有 euler-os-appstream 或 euler-os-plus 源,可尝试安装(部分版本已提供)
sudo yum install -y nginx
⚠️ 注意:EulerOS 2.0 SPx(如 SP3/SP9)的
euler-os-plus或appstream仓库中可能已收录nginx(版本通常为 1.18.x 或 1.20.x)。建议先执行yum search nginx或dnf search nginx(若已升级 dnf)确认。
方式二:手动编译安装(如源中无包)
- 下载源码(如 nginx-1.22.1)、编译安装至
/usr/local/nginx,并自行创建 systemd unit 文件(见下文)。
方式三:使用第三方源(谨慎评估安全性)
例如启用 EPEL(需确认兼容性):
sudo yum install -y https://repo.huaweicloud.com/euler/2.0/os/x86_64/Packages/euler-release-2.0-1.noarch.rpm
# 或导入 EPEL(非官方推荐,可能存在兼容风险)
sudo yum install -y epel-release
sudo yum install -y nginx
✅ 安装后验证:
nginx -v # 查看版本
nginx -t # 测试配置语法
systemctl list-unit-files | grep nginx # 检查是否已有 nginx.service
✅ 步骤 1:启动 Nginx 服务
# 启动(立即运行)
sudo systemctl start nginx
# 检查状态(应显示 active (running))
sudo systemctl status nginx
# 查看监听端口(默认 80)
sudo ss -tlnp | grep ':80'
✅ 步骤 2:设置开机自启
# 启用开机自启(写入 /etc/systemd/system/multi-user.target.wants/nginx.service)
sudo systemctl enable nginx
# 验证是否启用成功
sudo systemctl is-enabled nginx # 应输出 "enabled"
✅ 步骤 3:(可选)配置防火墙放行 HTTP(80)端口
EulerOS 2.0 默认使用 firewalld:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
# 或直接开放端口
# sudo firewall-cmd --permanent --add-port=80/tcp
# sudo firewall-cmd --reload
🔍 若使用
iptables(较少见),请确保规则允许:80。
✅ 补充:若 Nginx 是手动编译安装(如 /usr/local/nginx)
需创建 systemd unit 文件:
sudo tee /etc/systemd/system/nginx.service << 'EOF'
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s TERM /usr/local/nginx/logs/nginx.pid
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
然后重载 systemd 并启用:
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx
✅ 验证开机自启生效(可选测试)
# 模拟重启(生产环境慎用)
sudo reboot
# 或检查开机时服务是否被激活
sudo systemctl list-dependencies --before multi-user.target | grep nginx
❌ 常见问题排查
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
Failed to start nginx.service: Unit not found |
未安装或 unit 文件缺失 | 检查 rpm -qa | grep nginx 或 ls /usr/lib/systemd/system/nginx* |
nginx: [emerg] getpwnam("nginx") failed |
用户 nginx 不存在 |
sudo useradd -r -s /sbin/nologin nginx |
Job for nginx.service failed |
配置错误或端口被占 | sudo nginx -t + sudo ss -tlnp | grep :80 |
enable 成功但 is-enabled 显示 disabled |
权限/路径错误或 unit 未重载 | sudo systemctl daemon-reload 后再 enable |
✅ 总结命令(一键流程,假设已安装):
sudo nginx -t &&
sudo systemctl start nginx &&
sudo systemctl enable nginx &&
sudo firewall-cmd --permanent --add-service=http &&
sudo firewall-cmd --reload &&
echo "✅ Nginx 启动并设置开机自启成功!"
如需进一步定制(SSL、反向X_X等),可继续配置 /etc/nginx/nginx.conf 或站点配置文件(/etc/nginx/conf.d/*.conf)。
需要我为你生成一个完整的 nginx.conf 示例或 HTTPS 配置模板吗?
云小栈