无法连接到我的Ratchet / WebSocket服务器

时间:2015-06-02 20:07:09

标签: php nginx ratchet

我一直在努力让我的WebSocket服务器(在PHP中使用Ratchet)运行一天中的大部分时间,我觉得我已经尝试了所有的东西但仍然没有运气。当我尝试连接到JS中的WebSocket服务器时,它只需要很长时间,然后超时,基本上,服务器接受连接(我没有立即得到连接拒绝错误),但后来什么也没做。

我正在使用LEMP堆栈运行14.04 Ubuntu。我已经找到了大量的nginx配置来使这个工作,但它们都没有为我工作。奇怪的是,它在我的虚拟机本地运行完美,它运行LEMP堆栈,具有几乎相同的nginx配置。我从来不需要在我的nginx中配置任何东西来使websockets工作。

我一直用来测试的一个非常基本的Ratchet示例:http://socketo.me/docs/hello-world

我完全迷失了,任何帮助都会非常感激!

修改

好的,所以我发现我需要将我的proxy_pass设置在与根路径不同的路径上才能使其工作。所以最初我有这个:

location / {
    proxy_pass http://localhost:1111;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    try_files $uri $uri/ /index.php?$query_string;
}

但不是我把它改成了它,它正在发挥作用:

location /ws/ {
    proxy_pass http://localhost:1111;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

但是,我仍然想配置它以便它使用根URL,如果可能的话(我的意思是,应该是因为在我当地的Homestead机器上它确实在根路径上工作)

1 个答案:

答案 0 :(得分:0)

我在不久前写了一篇关于这个问题的精彩教程,我认为这涵盖了你所遇到的问题。

基本上,您无法在try_files块中拥有location和代理。导致0问题的最简单方法是使用自己的服务器定义从子域运行WebSocket。

在此处查看教程:http://blog.samuelattard.com/using-nginx-as-a-proxy-for-websocket-connections/