Nginx配置SSL和WSS步骤介绍

  

下面是 Nginx 配置 SSL 和 WSS 的完整攻略。同时提供两个示例说明。

1. 生成 SSL 证书

生成 SSL 证书是配置 HTTPS 的第一步。可以使用 OpenSSL 工具生成自签名的证书,或者购买证书。

1.1 自签名的证书

使用 OpenSSL 工具生成自签名的 SSL 证书:

# 生成私钥
openssl genrsa -out server.key 2048

# 生成证书签名请求(CSR)文件
openssl req -new -key server.key -out server.csr

# 签发证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

这样就得到了一个新的自签名的 SSL 证书,包括私钥文件 server.key 和证书文件 server.crt

1.2 购买证书

如果需要购买 SSL 证书,则需要到可信的证书颁发机构购买。

2. 配置 HTTPS

有了 SSL 证书之后,就可以在 Nginx 上开启 HTTPS 了。

2.1 修改 Nginx 配置文件

在 Nginx 配置文件中添加以下内容:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/server.crt;
    ssl_certificate_key /path/to/server.key;

    ...
}

其中:

  • listen 443 ssl; 表示监听 443 端口,并启用 SSL。
  • server_name 指定域名。
  • ssl_certificatessl_certificate_key 分别指定证书文件和私钥文件的路径。

2.2 重启 Nginx

修改完 Nginx 配置文件后,需要重启 Nginx 生效。

sudo systemctl restart nginx

3. 配置 WSS

WSS(WebSocket Secure)是 WebSocket 的加密版。使用 WSS 时,需要开启 HTTPS,并在 Nginx 中配置反向代理。

3.1 修改 Nginx 配置文件

在 Nginx 配置文件中添加以下内容:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/server.crt;
    ssl_certificate_key /path/to/server.key;

    # 配置 WebSocket 反向代理
    location /ws/ {
        proxy_pass http://localhost:3000/ws/;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    ...
}

其中:

  • location /ws/ 表示将客户端的 WebSocket 连接路径重定向到本地的 WebSocket 服务端口上。
  • proxy_pass 指定代理请求的目标地址。
  • proxy_http_version 指定使用的 HTTP 协议版本。
  • proxy_set_header 设置代理请求中的头部信息。

3.2 重启 Nginx

修改完 Nginx 配置文件后,需要重启 Nginx 生效。

sudo systemctl restart nginx

4. 示例说明

4.1 配置 HTTPS

假设现在有一个网站域名为 example.com,并且在服务器上已经安装了 Nginx。

首先,根据第一步的教程,生成自签名的 SSL 证书。

接着,在 Nginx 配置文件中添加以下内容:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
        root /var/www/html;
        index index.html;
    }
}

其中:

  • listen 443 ssl; 表示监听 443 端口,并启用 SSL。
  • server_name 指定域名。
  • ssl_certificatessl_certificate_key 分别指定证书文件和私钥文件的路径。
  • location / 指定静态文件的访问路径和跟目录。

最后,重启 Nginx。

sudo systemctl restart nginx

4.2 配置 WSS

假设现在有一个 WebSocket 服务应用,监听的端口为 3000。需要将 WebSocket 连接的路径 /ws/ 映射到 Nginx 服务器上。

首先,根据第一步的教程,生成自签名的 SSL 证书。

接着,在 Nginx 配置文件中添加以下内容:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location /ws/ {
        proxy_pass http://localhost:3000/ws/;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

其中:

  • listen 443 ssl; 表示监听 443 端口,并启用 SSL。
  • server_name 指定域名。
  • ssl_certificatessl_certificate_key 分别指定证书文件和私钥文件的路径。
  • location /ws/ 指定代理 WebSocket 连接的路径和目标地址。
  • proxy_http_version 指定使用的 HTTP 协议版本。
  • proxy_set_header 设置代理请求中的头部信息。

最后,重启 Nginx。

sudo systemctl restart nginx
相关文章