Git Product home page Git Product logo

Comments (17)

morozovsk avatar morozovsk commented on August 19, 2024 1

Что, кстати, указывать в proxy_pass - адрес:порт с websocket или localsocket ?

websocket

from websocket.

morozovsk avatar morozovsk commented on August 19, 2024

https://github.com/morozovsk/websocket/wiki/Together-with-nginx

from websocket.

ckjet avatar ckjet commented on August 19, 2024

Опять таймаут
У нас такой конфиг без ssl:
location /websocket {
#limit_conn perip 5; #set limit to 5 connection from 1 ip
proxy_pass http://127.0.0.2:8004;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s; #increase timeout to 1 hour
}

с ssl:
location /websocket {
#limit_conn perip 5; #set limit to 5 connection from 1 ip
proxy_pass https://127.0.0.2:8004;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s; #increase timeout to 1 hour
}

Вот ошибка в логе:upstream prematurely closed connection while reading response header from upstream

from websocket.

olegius88 avatar olegius88 commented on August 19, 2024

Здравствуйте. А вы не замеряли время, за которое отрабатывает ваш код на стороне сервера? может дело в том, что много времени уходит на работу php?

from websocket.

ckjet avatar ckjet commented on August 19, 2024

Если использовать http, то все работает, но на https вот так. Не думаю что в этом дело.

from websocket.

olegius88 avatar olegius88 commented on August 19, 2024

а у вас в секции
server {
ssl_certificate .ssl/geotrust.amix24.com.crt;
ssl_certificate_key .ssl/geotrust.amix24.com.key;
}
подобные записи есть? то есть, сам ssl сертификат подключили?

from websocket.

ckjet avatar ckjet commented on August 19, 2024

Сертификат подключен и работает.

from websocket.

olegius88 avatar olegius88 commented on August 19, 2024

попробуйте в адресе прописать wss://.../websocket:443

from websocket.

ckjet avatar ckjet commented on August 19, 2024

Не помогло

from websocket.

morozovsk avatar morozovsk commented on August 19, 2024

Вот ошибка в логе:upstream prematurely closed connection while reading response header from upstream

в логе чего? если в логе nginx, то у вас на указанном ip:port ничего не запущено
возможно вы имели ввиду 127.0.0.1, а не 127.0.0.2 ?

В любом случае нужны полные конфиги для http и https, описать случай в котором всё работает иначе это гадание на кофейной гуще.

Update:
в конфиге с ssl указано: proxy_pass https , а нужно http
сама библиотека работает по http, а nginx делает необходимое шифрование.

from websocket.

olegius88 avatar olegius88 commented on August 19, 2024

вот наш рабочий конфиг
location ws {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
proxy_pass http://127.0.0.1:8013;
proxy_http_version 1.1;
}
у нас 127.0.0.1

from websocket.

morozovsk avatar morozovsk commented on August 19, 2024

ок. скиньте конфиг и опишите случай, в котором у вас работает.
скиньте полный конфиг (с секцией sever и port), в неработающем случае
скиньте полный конфиг (с секцией sever и port), в работающем случае
кто выдаёт ошибку и какую в случае не работающего

from websocket.

ckjet avatar ckjet commented on August 19, 2024

Решил через саму библиотеку, через nginx не получалось

from websocket.

olegius88 avatar olegius88 commented on August 19, 2024

поделитесь

from websocket.

ckjet avatar ckjet commented on August 19, 2024

при инициализации я добавил опции:

'secure' => true,
'cert_file' => '/path/to/ssl.crt', //path to ssl ceritificate
'pk_file' => '/path/to/ssl.key', //path to private key file
'websocket' => 'ssl://0.0.0.0:8004',

Далее в файле Servver.php изменил код на:

if (!empty($this->config['websocket'])) {
            //open server socket
            if ($this->config['secure']) {
                $context = stream_context_create();
                if (!is_file($this->config['cert_file'])) {
                    die("Error open cert-file\n");
                }
                if (!is_file($this->config['pk_file'])) {
                    die("Error open key-file\n");
                }
                stream_context_set_option($context, 'ssl', 'local_cert', $this->config['cert_file']);
                stream_context_set_option($context, 'ssl', 'local_pk', $this->config['pk_file']);
                $server = stream_socket_server($this->config['websocket'], $errorNumber, $errorString, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context);
            } else {
                $server = stream_socket_server($this->config['websocket'], $errorNumber, $errorString);
                stream_set_blocking($server, 0);
            }
            if (!$server) {
                die("error: stream_socket_server: $errorString ($errorNumber)\r\n");
            }
        }

Долгое время не мог понять почему данные при использовании ssl приходят в виде похожем на бинарный, оказалось что дело было из-за этой строки: stream_set_blocking($server, 0); я ее убрал и все работает отлично.

from websocket.

borodatych avatar borodatych commented on August 19, 2024

Здравствуйте.

Конфиг веб-сокет сервера:

$config = array(
    'class' => 'Backend\Chat\Handler',
    'pid' => '/tmp/websocket_chat.pid',
    'websocket' => 'tcp://80.xx.xx.82:8004',
    'localsocket' => 'tcp://127.0.0.1:8010',
    'eventDriver' => 'event'
);

Конфиг Nginx:

location /websocket {
        #limit_conn perip 5; #set limit to 5 connection from 1 ip
        proxy_pass http://127.0.0.1:8010;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 3600s; #increase timeout to 1 hour
}

Сейчас в консоле браузера:

WebSocket connection to 'ws://site.ru/websocket?userId=3r3f3b0l09geeevio4c6np55g1_255' failed: Error during WebSocket handshake: Unexpected response code: 404

Что, кстати, указывать в proxy_pass - адрес:порт с websocket или localsocket ?

from websocket.

borodatych avatar borodatych commented on August 19, 2024

От себя хочу добавить, что если у кого то не заводится, то попробуйте это реализовать на другом домене/поддомене.
У нас, к примеру, на основном куча всего накручено, и не заработало.
На чистеньком поддомене, все гуд.

from websocket.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.