宝塔中的nginx配置websocket,采用ws/wss方式配置

本文介绍了如何在宝塔面板中通过Nginx配置WebSocket服务,包括自定义路径和反向代理的方法,并提供了配置代码示例。同时,强调了需要在安全设置中放行相关端口以确保正常运行。

项目描述

项目直接用了宝塔家的nginx,做的反向代理,后来有了websocket的配置需求,经过一番探索,得以解决,记录备忘。

Nginx自定义路径的方式

网站——设置——配置文件
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/3d5d89ee1bc84c53b621d84c1712a155.png

server
{
    listen 80;
	listen 443 ssl http2;
	......
	......
    #SSL-END
	##访问域名wss://doc.mate.vip/wss  即可
    location /wss {
          proxy_pass http://127.0.0.1:50001; ##代理到上面的ip
          proxy_connect_timeout 30s;
          proxy_read_timeout 86400s;
          proxy_send_timeout  30s;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "Upgrade";
	}
	......
	......

访问地址示例:https://doc.mate.vip/wss

Nginx反向代理的方式

在这里插入图片描述
在这里插入图片描述

配置代码

#持久化连接配置
proxy_connect_timeout 30s;
proxy_read_timeout 86400s;
proxy_send_timeout  30s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

这时候就可以使用websocket愉快地畅游了。

友情提醒

宝塔面板里——安全设置需要把相关端口放行
另外如果阿里云的ecs也需要进行放行操作

微服务项目

https://gitee.com/matevip/matecloud

<think>首先,用户的问题是关于配置NginxWebSocketws升级到wss。用户指定了使用Nginx配置WebSocket转发,从wswss。 从系统级指令中,我需要: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户提供的引用是: - [^1]: 关于Django + uwsgi + nginx配置WebSocket的示例。 - [^2]: 关于Nginx配置WebSocket支持wssws连接的注意事项。 - [^3]: 关于nginx配置WebSocket参数wss连接的示例。 - [^4]: 宝塔中的nginx配置websocket的示例。 这些引用提供了配置示例和常见错误点。 用户的问题:"我想配置nginxWebSocketws升级到wss 请问nginx 配置 WebSocket 转发 wswss" 关键点: - 用户想要将WebSocket连接从ws(HTTP)升级到wssHTTPS)。 - 这通常涉及在Nginx配置代理,将WebSocket请求转发到后端服务器,并处理SSL终止。 在WebSocket中: - ws:// 是未加密的WebSocket。 - wss:// 是加密的WebSocket,通常通过HTTPS配置Nginxws升级到wss意味着: - Nginx监听HTTPS端口(443),处理SSL。 - 当客户端通过wss://连接到Nginx时,Nginx代理请求到后端的ws://服务。 - Nginx需要设置特定的头部来升级连接。 从引用中提取关键信息: - [^1]:显示了proxy_set_header Upgrade和Connection。 - [^2]:提到了配置中的常见错误,如location路径末尾的斜杠。 - [^3]:提供了完整的配置,包括map块和proxy_set_header。 - [^4]:展示了宝塔面板中的配置示例。 标准配置步骤: 1. 确保Nginx配置了SSL证书,以支持HTTPS。 2. 在server块中,为WebSocket路径添加location。 3. 设置proxy_pass指向后端WebSocket服务器(通常是ws://)。 4. 设置proxy_http_version 1.1。 5. 设置Upgrade和Connection头部。 6. 可能设置超时参数。 常见配置: ```nginx location /ws/ { proxy_pass http://backend:port; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } ``` 对于wss,需要在server块中启用SSL。 回答结构: - 由于用户要求结构清晰,逐步解决问题。 - 使用中文。 - 最后生成相关问题。 大纲回答: 1. **介绍**:解释wswss的区别,以及Nginx的作用。 2. **前提条件**:确保有SSL证书并配置HTTPS。 3. **配置步骤**: - 添加location块用于WebSocket路径。 - 设置proxy_pass。 - 设置必要的头部。 - 可选:设置超时。 4. **完整示例**:提供一个完整的Nginx配置片段。 5. **常见问题**:基于引用,提到常见错误。 6. **测试**:如何测试配置。 7. **生成相关问题**:在末尾添加相关问题。 数学表达式:用户的问题不涉及数学,所以可能不需要LaTeX。但如果提到公式,确保格式正确。例如,如果有方程,但这里不太可能有。 引用标识:在回答中,当引用提供的引用内容时,添加[^1], [^2]等。 例如: - 如引用[^1]所示,需要设置Upgrade头部。 生成相关问题: - 基于主题,生成3-4个相关问题。 完整回答: - 以用户可见层开始。 - 确保可靠:基于标准Nginx实践和引用。</think>### Nginx 配置 WebSocketws 升级到 wss 要将 WebSocket 连接从 `ws://`(未加密)升级到 `wss://`(加密),需在 Nginx配置 SSL 终止和 WebSocket 代理转发。核心是通过 `proxy_set_header` 设置连接升级头部,并确保 SSL 证书正确配置。以下是详细步骤(基于最佳实践和引用内容整理): --- #### 前提条件 1. **SSL 证书**:已获取有效的 SSL 证书(如 Let's Encrypt 或商业证书),包含 `.crt` 和 `.key` 文件。 2. **后端服务**:WebSocket 服务(如 Django、Node.js)运行在指定端口(例如 `ws://localhost:8000`)。 3. **Nginx 版本**:建议使用 Nginx 1.14+ 以支持 WebSocket 代理。 --- #### 配置步骤 1. **配置 HTTPS 监听** 在 Nginx 的 `server` 块中启用 SSL,监听 443 端口: ```nginx server { listen 443 ssl http2; # 启用 SSL 和 HTTP/2 server_name your-domain.com; # 替换为你的域名 # SSL 证书路径 ssl_certificate /etc/nginx/ssl/your-domain.crt; # 证书文件 ssl_certificate_key /etc/nginx/ssl/your-domain.key; # 私钥文件 ssl_session_timeout 10m; # SSL 会话超时 # 其他 SSL 优化参数(可选) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; } ``` 2. **添加 WebSocket 代理配置** 在 `server` 块内添加 `location` 规则,指定 WebSocket 路径(如 `/ws/`): ```nginx location /ws/ { # 注意:路径末尾必须加斜杠,避免匹配错误[^2] proxy_pass http://localhost:8000; # 后端 WebSocket 服务地址(ws://) proxy_http_version 1.1; # 必须使用 HTTP/1.1 # 关键:设置连接升级头部 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 可选:优化超时和日志 proxy_read_timeout 86400s; # 长连接超时(例如 24 小时) proxy_connect_timeout 30s; access_log /var/log/nginx/websocket.log; # 单独日志文件[^1] # 其他代理头部 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } ``` 3. **HTTP 重定向到 HTTPS(可选)** 强制将所有 `http://` 请求重定向到 `https://`: ```nginx server { listen 80; server_name your-domain.com; return 301 https://$host$request_uri; # 永久重定向 } ``` --- #### 完整配置示例 ```nginx # 定义连接升级映射(推荐) map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 443 ssl http2; server_name your-domain.com; # SSL 配置 ssl_certificate /etc/nginx/ssl/your-domain.crt; ssl_certificate_key /etc/nginx/ssl/your-domain.key; ssl_session_timeout 10m; # WebSocket 代理 location /ws/ { # 客户端通过 wss://your-domain.com/ws/ 连接 proxy_pass http://localhost:8000; # 代理到后端的 ws:// proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # 使用 map 变量[^3] proxy_set_header Host $host; proxy_read_timeout 86400s; } # 其他配置(如静态文件服务) location / { root /var/www/html; index index.html; } } server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; } ``` --- #### 常见错误与解决 - **路径匹配错误**:`location /ws/` 末尾的斜杠 `/` 不可省略,否则可能匹配失败[^2]。 - **代理地址错误**:`proxy_pass` 的端口必须与后端服务一致(如 `http://localhost:8000`),且结尾不加斜杠[^2]。 - **头部未设置**:缺少 `Upgrade` 或 `Connection` 头部会导致连接无法升级(错误码 426)。 - **SSL 证书问题**:证书路径错误或域名不匹配会中断 HTTPS 连接。 - **超时断开**:调整 `proxy_read_timeout` 避免空闲断开(默认 Nginx 超时为 60 秒)。 --- #### 测试方法 1. **验证配置**:运行 `nginx -t` 检查语法。 2. **重启 Nginx**:`systemctl restart nginx`。 3. **客户端测试**:使用 JavaScript 或工具(如 `wscat`)连接 `wss://your-domain.com/ws/`: ```javascript const socket = new WebSocket("wss://your-domain.com/ws/"); socket.onopen = () => console.log("Connected via wss!"); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值