Nginx部署手册

lishihuan大约 6 分钟

Nginx部署手册

以下是适用于主流Linux系统(CentOS/Ubuntu)的Nginx完整使用手册,涵盖安装、基础配置、HTTPS配置及常见管理操作,同时补充问题排查方法,适配你的证书配置相关需求。

一、Nginx安装

Nginx安装:

  • 包管理器安装(推荐新手)
  • 源码编译安装(适合自定义功能)

1. CentOS系统 【推荐使用】

(1)yum包管理器安装(简单高效)
  1. 更新系统并安装依赖:
    sudo yum update -y
    sudo yum install epel-release -y  # 安装EPEL仓库
    
  2. 安装Nginx:
    sudo yum install nginx -y
    
  3. 启停与开机自启:
    sudo systemctl start nginx  # 启动
    sudo systemctl enable nginx  # 开机自启
    sudo systemctl status nginx  # 查看运行状态
    
  4. 放行防火墙端口: 【云服务是在安全组中放开端口】
    sudo firewall-cmd --permanent --add-service=http  # 放行80端口
    sudo firewall-cmd --permanent --add-service=https  # 放行443端口
    sudo firewall-cmd --reload  # 重载防火墙规则
    
(2)源码编译安装(自定义安装路径和模块)--- 了解
  1. 安装编译依赖:
    sudo yum install gcc pcre-devel zlib-devel openssl-devel wget -y
    
  2. 下载并解压源码包(以1.24.0稳定版为例):
    wget https://nginx.org/download/nginx-1.24.0.tar.gz
    tar -zxvf nginx-1.24.0.tar.gz
    cd nginx-1.24.0
    
  3. 配置编译参数(指定安装路径并启用SSL模块):
    ./configure --prefix=/usr/local/nginx --with-http_ssl_module
    
  4. 编译并安装:
    make && make install
    
  5. 快速启停:
    /usr/local/nginx/sbin/nginx  # 启动
    /usr/local/nginx/sbin/nginx -s stop  # 停止
    /usr/local/nginx/sbin/nginx -s reload  # 重载配置
    

2. Ubuntu系统

  1. 更新源并安装Nginx:

    sudo apt update -y
    sudo apt install nginx -y
    
  2. 启停管理:

    sudo systemctl start nginx
    sudo systemctl enable nginx
    
  3. 防火墙(UFW)放行(如启用 UFW):

    sudo ufw allow "Nginx Full"   # 放行 80/443
    sudo ufw status
    

二、Nginx基础配置

1. 配置文件架构说明

Nginx 采用"主配置 + 子配置"的分层结构:

/etc/nginx/nginx.conf(主配置,已存在)
    ├── 全局配置(worker进程数、错误日志级别等)
    └── http { ... }  块
        ├── 通用HTTP设置(gzip、日志格式、mime类型等)
        └── include 指令 → 自动加载站点配置文件
            ├── include /etc/nginx/conf.d/*.conf;      ← CentOS/RHEL
            └── include /etc/nginx/sites-enabled/*;    ← Ubuntu/Debian

为什么要分成两个文件?

  1. 主配置文件nginx.conf):

    • 系统已自带,包含全局设置(worker 进程、日志、gzip 等)
    • 一般不需要手动修改,只需检查其中的 include 指令
  2. 站点配置文件conf.d/*.confsites-available/*):

    • 你需要新建的文件,每个网站一个独立配置
    • 通过主配置的 include 自动加载,无需手动关联
    • 好处:管理多个网站时互不干扰,启用/禁用站点只需增删文件

核心文件路径对照表:

文件/目录作用
/etc/nginx/nginx.conf主配置文件(已存在),包含全局设置和 include 指令
/etc/nginx/conf.d/站点配置目录(CentOS/RHEL),主配置会自动加载 *.conf
/etc/nginx/sites-available/ + sites-enabled/站点配置目录(Ubuntu/Debian),需软链接启用
/usr/share/nginx/html默认网站根目录(CentOS/RHEL)
/var/www/html默认网站根目录(Debian/Ubuntu)
/var/log/nginx/日志目录(access.log、error.log)

2. 主配置文件(nginx.conf)示例与说明

查看你的主配置文件:

cat /etc/nginx/nginx.conf

典型的 nginx.conf 结构(CentOS 为例):

user nginx;
worker_processes auto;  # 自动根据CPU核心数调整
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;  # 单个worker进程最大连接数
}

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;
    keepalive_timeout 65;
    gzip on;

    # ★★★ 关键:自动加载站点配置 ★★★
    include /etc/nginx/conf.d/*.conf;  # CentOS/RHEL
    # Ubuntu/Debian 是:include /etc/nginx/sites-enabled/*;
}

重要说明:

  • 最后一行的 include /etc/nginx/conf.d/*.conf;自动加载 conf.d 目录下所有 .conf 文件
  • 只需在 conf.d 目录新建站点配置,主配置文件 nginx.conf 无需修改
  • Ubuntu/Debian 的主配置是 include /etc/nginx/sites-enabled/*;(无 .conf 后缀要求)

3. 基础HTTP站点配置(子配置文件)

以配置www.islh.cn为例,按系统放置配置文件:

  • CentOS/RHEL(使用 conf.d):
    sudo vim /etc/nginx/conf.d/islh.cn.conf
    
  • Debian/Ubuntu(使用 sites-available + sites-enabled):
    sudo vim /etc/nginx/sites-available/islh.cn
    sudo ln -s /etc/nginx/sites-available/islh.cn /etc/nginx/sites-enabled/islh.cn
    

写入以下内容,实现基础HTTP访问(注意按系统替换网站根目录:CentOS 用 /usr/share/nginx/html,Ubuntu 用 /var/www/html):

server {
    listen 80;
    listen [::]:80;
    server_name www.islh.cn islh.cn;  # 绑定你的域名
    root /usr/share/nginx/html;  # Ubuntu/Debian 请改为 /var/www/html
    index index.html index.htm;  # 默认首页

    # 访问日志配置
    access_log /var/log/nginx/islh_access.log;
    error_log /var/log/nginx/islh_error.log;

    # 静态资源缓存配置(可选,扩展更多类型)
    location ~* \.(avif|webp|jpg|jpeg|png|gif|svg|ico|css|js|map|woff|woff2|ttf)$ {
        expires 30d;  # 缓存30天
        add_header Cache-Control "public";
        access_log off;
    }
}

配置完成后检查语法并重载:

sudo nginx -t  # 检查语法,显示syntax is ok即正常
sudo systemctl reload nginx

三、HTTPS配置

HTTPS配置核心是获取SSL证书并配置Nginx启用443端口,以下以免费的Let's Encrypt证书为例。

1. 获取SSL证书

  1. 安装Certbot工具:

    • CentOS:
      sudo yum install certbot python3-certbot-nginx -y
      
    • Ubuntu:
      sudo apt install certbot python3-certbot-nginx -y
      
  2. 自动获取证书并配置Nginx:

    sudo certbot --nginx -d www.islh.cn  # 替换为你的域名
    

    执行后按提示操作,Certbot会自动生成证书并修改Nginx配置。

  3. 手动配置证书(若使用第三方付费证书或未使用 --nginx 自动改写)

    • 若通过 Certbot 获取证书,推荐直接使用标准路径:
      • 证书:/etc/letsencrypt/live/islh.cn/fullchain.pem
      • 私钥:/etc/letsencrypt/live/islh.cn/privkey.pem
    • 若是第三方证书,可放置于 /etc/nginx/ssl/ 并调整下方路径。

    编辑站点配置文件(参考不同系统路径):

    • CentOS/RHEL:/etc/nginx/conf.d/islh.cn.conf
    • Debian/Ubuntu:/etc/nginx/sites-available/islh.cn(并确保已在 sites-enabled 建立软链接)

    写入HTTPS配置(包含 HTTP→HTTPS 跳转、IPv6、HTTP/2、HSTS、OCSP Stapling): ```nginx server { listen 80; listen [::]:80; server_name www.islh.cnopen in new window islh.cnopen in new window; return 301 https://hosthostrequest_uri; # HTTP强制跳转HTTPS } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name www.islh.cnopen in new window islh.cnopen in new window;

    证书路径(优先使用 Certbot 标准路径,第三方证书请改为 /etc/nginx/ssl/.pem|.key)

    ssl_certificate /etc/letsencrypt/live/islh.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/islh.cn/privkey.pem;
    

    SSL安全配置(提升兼容性和安全性)

    ssl_protocols TLSv1.2 TLSv1.3;  # 仅启用安全协议
    # TLSv1.3 使用内置套件;下行主要影响 TLSv1.2
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE+AESGCM;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_prefer_server_ciphers off;
    

    HSTS(启用后强制浏览器仅走 HTTPS,确认站点稳定再开启)

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    

    OCSP Stapling(提升证书校验性能与安全性)

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 1.1.1.1 valid=300s;
    resolver_timeout 5s;
    ssl_trusted_certificate /etc/letsencrypt/live/islh.cn/chain.pem;
    

    网站基础配置

    root /usr/share/nginx/html;  # Ubuntu/Debian 请改为 /var/www/html
    index index.html;
    

    access_log /var/log/nginx/islh_https_access.log; error_log /var/log/nginx/islh_https_error.log; } ```

2. 证书自动续期

Let's Encrypt证书有效期为90天,可通过以下命令设置自动续期:

sudo certbot renew --dry-run  # 测试续期

Certbot默认会添加定时任务,无需手动重复操作。

3. 验证HTTPS配置

  1. 检查配置并重载Nginx:
    sudo nginx -t
    sudo systemctl reload nginx
    
  2. 浏览器访问https://www.islh.cn,若地址栏显示小锁图标则配置成功。也可通过SSL Labsopen in new window检测证书有效性。

四、Nginx常用管理命令

命令作用
sudo nginx -t检查配置文件语法
sudo systemctl reload nginx重载配置(不中断服务)
sudo systemctl restart nginx重启Nginx
sudo systemctl stop nginx停止Nginx
tail -f /var/log/nginx/error.log实时查看错误日志

五、常见问题排查

  1. 配置HTTPS后仍提示危险:检查证书是否匹配域名、证书链是否完整。使用 Certbot 时可通过 openssl x509 -in /etc/letsencrypt/live/islh.cn/fullchain.pem -noout -text 查看证书详情;若使用第三方证书,请改为对应 .pem 路径。
  2. Nginx启动失败:通过journalctl -u nginx查看启动日志,大概率是端口被占用或配置文件语法错误。
  3. 证书验证不通过:确认服务器443端口对外开放,且域名解析指向当前服务器IP。