努力
加油

在华为云EulerOS 2.0标准版64位系统上如何安装和配置Nginx?

在华为云 EulerOS 2.0 (基于 CentOS/RHEL 体系) 上部署 Nginx,最稳妥且符合生产环境规范的做法是通过官方 YUM 源安装稳定版,而不是去官网下载源码包编译(除非你有特殊的模块需求)。

以下是经过验证的标准操作流程,分为“一键脚本版”和“手动详解版”,建议生产环境参考手动版的逻辑。


一、 前置准备:安全组与系统更新

EulerOS 默认防火墙策略较严,且华为云 ECS 实例需要在控制台开启端口。

  1. 配置安全组(Security Group)

    • 登录华为云控制台 -> 计算服务 -> 弹性云服务器 -> 找到你的实例 -> 点击“安全组”。
    • 入方向规则添加:
      • 协议:TCP
      • 端口范围:80, 443
      • 源地址:0.0.0.0/0(或指定 IP 段)
  2. 系统基础优化

    # 更新所有系统包到最新状态
    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

五、 验证与排错

  1. 测试配置文件语法

    sudo nginx -t

    输出 syntax is ok 和 test is successful 后再重启。

  2. 重启 Nginx

    sudo systemctl restart nginx
  3. 检查进程与端口

    ps -ef | grep nginx
    ss -tlnp | grep :80
    ss -tlnp | grep :443
  4. 从外部访问
    使用浏览器访问 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 或检查日志目录权限

七、 进阶建议(生产环境)

  1. 使用 systemd 管理:务必使用 systemctl 而非直接调用 nginx 命令,便于日志管理和故障恢复。
  2. 日志轮转:EulerOS 自带 logrotate 配置,无需额外设置,定期清理旧日志。
  3. 性能调优:在高并发场景下,调整 /etc/security/limits.conf 中的 nofile 参数,避免 “Too many open files” 错误。
  4. 监控集成:结合 Prometheus + Node Exporter + Nginx Plus/OpenResty 模块,实现流量监控。

以上流程适用于华为云 EulerOS 2.0 SP1/SP2/SP3 等主流版本。如遇特殊报错,请优先查看 /var/log/nginx/error.log 获取具体错误码。