Apache 2.4 重写 Upgrade = websocket 没有传进去
时间: 2024-03-05 10:47:51 浏览: 108
如果你在 Apache 2.4 下使用重写规则将 HTTP 升级为 WebSocket 连接时遇到问题,可能是因为 Apache 2.4 的重写规则会中断升级。
要解决这个问题,你需要在 Apache 2.4 的配置文件中添加一个特殊的重写条件,以允许 WebSocket 连接通过。以下是具体步骤:
1. 打开 Apache 2.4 的配置文件,找到 `LoadModule rewrite_module modules/mod_rewrite.so`,确保 `mod_rewrite` 模块已经加载。
2. 在配置文件中添加以下重写规则:
```
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule .* ws://localhost:8000%{REQUEST_URI} [P]
```
这个规则将检查请求头中 `Upgrade` 和 `Connection` 字段是否包含 WebSocket 相关信息,如果包含则将请求重写为 WebSocket 连接。你需要将 `ws://localhost:8000` 替换为你的 WebSocket 服务器地址和端口。
3. 然后,你需要添加一个特殊的重写条件,以允许 WebSocket 连接通过。在配置文件中添加以下代码:
```
RewriteCond %{REQUEST_URI} !^/websocket/ [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule .* /websocket%{REQUEST_URI} [P]
```
这个条件将检查请求的 URI 是否以 `/websocket/` 开头,如果不是,则将请求重写到 `/websocket/` 路径下,以允许 WebSocket 连接通过。
4. 最后,重启 Apache 服务即可。
这样,你就可以使用上述重写规则将 HTTP 升级为 WebSocket 连接,并解决 Apache 2.4 下的连接中断问题。
阅读全文