Skip to content

Nginx 配置教程

本教程介绍如何 Web 应用配置 Nginx 反向代理,并开启 HTTPS 支持。

1. 生成自签名证书

内网测试环境可使用自签名证书。生产环境建议使用 Let's Encrypt 或正式 CA 签发的证书。

创建证书目录并生成证书:

bash
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 3650 \
  -newkey rsa:2048 \
  -keyout /etc/nginx/ssl/deplos.lab.key \
  -out /etc/nginx/ssl/deplos.lab.crt \
  -subj "/CN=deplos.lab"

-days 3650 表示证书有效期 10 年,可根据需要调整。

设置文件权限:

bash
sudo chmod 600 /etc/nginx/ssl/deplos.lab.key
sudo chmod 644 /etc/nginx/ssl/deplos.lab.crt

2. 完整配置示例

创建配置文件:

bash
vi /etc/nginx/conf.d/deplos-dev.conf

写入以下内容:

nginx
server {
    listen 443 ssl;
    server_name deplos.lab;

    # 自签名证书路径(内网测试用)
    ssl_certificate     /etc/nginx/ssl/deplos.lab.crt;
    ssl_certificate_key /etc/nginx/ssl/deplos.lab.key;
    
    # 强制使用的安全协议和加密套件
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        # 转发至 deplos 服务端口
        proxy_pass proxy_pass http://127.0.0.1:9100;
        
        # 传递客户端真实信息
        proxy_set_header Host              $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP         $remote_addr;
        
        # 响应超时
        proxy_read_timeout 300s;

        # WebSocket 支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

3. 配置说明

3.1 SSL 配置

  • listen 443 ssl: 监听 443 端口并启用 SSL。
  • ssl_certificate: 指定 SSL 证书文件的完整路径。
  • ssl_certificate_key: 指定 SSL 私钥文件的完整路径。
  • ssl_protocols: 强制使用 TLSv1.2 和 TLSv1.3 协议。
  • ssl_ciphers: 排除不安全的加密套件。

3.2 反向代理

  • proxy_pass: 将所有请求转发至本地的 9100 端口。
  • X-Forwarded-Proto: 告知后端程序原始请求使用的是 HTTPS 协议。
  • X-Forwarded-For: 传递客户端真实 IP 链。
  • X-Real-IP: 传递客户端真实 IP 地址。
  • proxy_read_timeout: 后端响应超时时间,默认 60s,建议设为 300s。

3.3 WebSocket

以下两行配置确保 Nginx 能正确处理协议升级请求:

nginx
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

4. HTTP 自动跳转 HTTPS(可选)

如需将 http://deplos.lab 自动重定向到 HTTPS,请在同一个配置文件(/etc/nginx/conf.d/deplos-dev.conf)的底部,追加以下配置段:

nginx
server {
    listen 80;
    server_name deplos.lab;
    return 301 https://$host$request_uri;
}

5. 应用配置

完成编辑后,请按照以下步骤检查并使配置生效:

  1. 检查语法错误

    bash
    nginx -t

    如果显示 syntax is oktest is successful,则表示配置无误。

  2. 重新加载 Nginx

    bash
    systemctl reload nginx

6. 常见问题

  • 防火墙设置:如果无法访问,请检查防火墙是否允许 80 和 443 端口的流量:
    bash
    firewall-cmd --permanent --add-service=http
    firewall-cmd --permanent --add-service=https
    firewall-cmd --reload
  • Hosts 解析:由于 server_name 设置为 deplos.lab,测试时请确保您的客户端 hosts 文件已将该域名正确指向服务器 IP。