Apache反向代理下Node.js应用无响应的排查求助
问题解决步骤
1. 调整Apache虚拟主机配置
你的当前配置缺少WebSocket代理支持,且路径匹配规则存在问题,修改后的完整配置如下:
<VirtualHost *:443> ServerName jutechs.de SSLProxyEngine On SSLProxyCheckPeerCN on SSLProxyCheckPeerExpire on ProxyRequests Off ProxyPreserveHost On ProxyVia Full <Proxy *> Require all granted </Proxy> # 处理socket.io的WebSocket请求转发 RewriteEngine On RewriteCond %{REQUEST_URI} ^/textEdit/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /textEdit/(.*) wss://127.0.0.1:2096/$1 [P,L] # 代理HTTP请求到Node应用,注意路径尾斜杠的匹配 <Location /textEdit/> ProxyPass https://127.0.0.1:2096/ ProxyPassReverse https://127.0.0.1:2096/ </Location> <Directory "/var/www/html/textEdit"> AllowOverride All </Directory> </VirtualHost>
核心改动说明:
- 启用Rewrite规则,将socket.io的WebSocket请求(wss协议)转发到Node服务
- 为
Location和ProxyPass添加尾斜杠,确保子路径下的所有请求都能被正确代理
2. 修改Node.js应用配置(Express + socket.io)
由于应用通过/textEdit子路径对外提供服务,需要给Express和socket.io设置路径前缀:
const express = require('express'); const http = require('http'); const { Server } = require('socket.io'); const app = express(); const server = http.createServer(app); // 将静态文件挂载到/textEdit路径下 app.use('/textEdit', express.static('public')); // 配置socket.io的路径前缀与跨域规则 const io = new Server(server, { path: '/textEdit/socket.io', cors: { origin: 'https://jutechs.de', methods: ["GET", "POST"] } }); // 在线用户计数逻辑 io.on('connection', (socket) => { io.emit('user count', io.engine.clientsCount); socket.on('disconnect', () => { io.emit('user count', io.engine.clientsCount); }); }); server.listen(2096, () => { console.log('服务运行在 *:2096'); });
核心改动说明:
- Express静态资源挂载到
/textEdit,匹配代理路径 - socket.io指定
path为/textEdit/socket.io,对应Apache的转发规则 - 明确CORS允许的域名,避免跨域拦截
3. 修正前端socket.io连接代码
前端页面中需要指定正确的socket.io连接路径:
// 前端JS代码 const socket = io({ path: '/textEdit/socket.io' }); // 监听用户计数更新 socket.on('user count', (count) => { document.getElementById('user-count').textContent = count; });
验证步骤
- 重启Apache服务:
sudo systemctl restart apache2 - 重启Node.js应用
- 访问
https://jutechs.de/textEdit,检查用户计数器是否正常更新
内容的提问来源于stack exchange,提问作者Sobig_F
相关产品推荐
相关产品推荐

