【发布时间】:2017-06-10 01:09:15
【问题描述】:
如何在 nginx 中使用 PHP 设置 websockets?
我看过这个教程,但不能让它工作
https://www.sanwebe.com/2013/05/chat-using-websocket-php-socket
已将三个文件复制到www目录的根目录
/index.php
/jquery-3.1.1.js
/websocket/server.php
在index.php我已经更改了URI
var wsUri = "wss://domain.com/websocket/server.php";
在 nginx 我已经添加了这个
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
location /websocket/ {
proxy_pass https://domain.com:9000/websocket/server.php;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
}
http://nginx.org/en/docs/http/websocket.html
启动 websocket 服务器
php -q /var/www/websocket/server.php
聊天位于https://domain.com/chat.php 并加载,但在聊天窗口Error Occurred - Connection closed 中出现此错误
也尝试通过这个工具连接,但得到这个错误
http://www.websocket.org/echo.html
ERROR: undefined
DISCONNECTED
如果通过浏览器请求
wss://domain.com/websocket/server.php
ERR_DISALLOWED_URL_SCHEME
【问题讨论】:
-
我假设错误显示在浏览器窗口中,而不是 nginx 或 php 日志中。你有没有机会使用谷歌浏览器来测试这个(productforums.google.com/forum/#!topic/chrome/leVmLPNVISI)?如果是这样,请尝试使用其他浏览器。
-
是的,谷歌Chrome浏览器出现错误。。也试过FF。。这里我什至没有收到错误
-
尝试窃听您的客户端和 nginx 以及 nginx 和 php 之间的流量,例如,使用例如
tcpdump检查设置是否在网络级别按预期工作。 -
@TomRegner 你能给我一个例子吗?
-
在 SO 上搜索“tcpdump websocket”,你会发现的讨论应该让你继续前进