【发布时间】:2019-04-13 12:00:12
【问题描述】:
将 Apache 服务器与 Engintron 一起使用,并且我正在运行一个 expressJS 应用程序,它接受 socket.io 连接来处理 websocket 调用。
但是每当主站点(在 PHP 中)尝试调用 nodeJS 应用程序时,它会在握手时返回错误 400,然后退回到长轮询。
【问题讨论】:
标签: node.js express nginx websocket socket.io
将 Apache 服务器与 Engintron 一起使用,并且我正在运行一个 expressJS 应用程序,它接受 socket.io 连接来处理 websocket 调用。
但是每当主站点(在 PHP 中)尝试调用 nodeJS 应用程序时,它会在握手时返回错误 400,然后退回到长轮询。
【问题讨论】:
标签: node.js express nginx websocket socket.io
因为我花了很多时间来弄清楚它是如何工作的,所以我想我会在这里发布问题和答案,这样其他人,或者我未来的自己就不必在这上面花费无数时间,因为互联网上没有太多关于它的信息。
所有答案都指向我启用 mod_proxy_wstunnel,但实际上这不是我的实际问题。当我禁用 Engintron 并发现它开始工作时,我意识到了这一点。
所以你需要做的是访问 Engintron,转到 Edit proxy_params_common,并确保它看起来像这样:
# /**
# * @version 1.9.3
# * @package Engintron for cPanel/WHM
# * @author Fotis Evangelou (https://kodeka.io)
# * @url https://engintron.com
# * @copyright Copyright (c) 2018 - 2019 Kodeka OÜ. All rights reserved.
# * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html
# */
# General Proxy Settings
proxy_pass $PROXY_SCHEME://$PROXY_DOMAIN_OR_IP:$PROXY_TO_PORT;
#proxy_hide_header Upgrade;
proxy_http_version 1.1; # Always upgrade to HTTP/1.1
proxy_set_header Accept-Encoding ""; # Optimize encoding
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; # Enable keepalives
proxy_set_header Host $host;
proxy_set_header Proxy "";
proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $PROXY_FORWARDED_HOST;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header CF-Connecting-IP $http_cf_connecting_ip;
proxy_set_header CF-Visitor $http_cf_visitor;
# Buffers
proxy_buffers 256 16k;
proxy_buffer_size 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
# Timeouts
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
主要区别:
#proxy_hide_header Upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; # Enable keepalives
【讨论】: