下面是 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_certificate
和ssl_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_certificate
和ssl_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_certificate
和ssl_certificate_key
分别指定证书文件和私钥文件的路径。location /ws/
指定代理 WebSocket 连接的路径和目标地址。proxy_http_version
指定使用的 HTTP 协议版本。proxy_set_header
设置代理请求中的头部信息。
最后,重启 Nginx。
sudo systemctl restart nginx
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nginx配置SSL和WSS步骤介绍 - Python技术站