Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wss timeot #31

Closed
ckjet opened this issue Jan 6, 2017 · 17 comments
Closed

wss timeot #31

ckjet opened this issue Jan 6, 2017 · 17 comments

Comments

@ckjet
Copy link

ckjet commented Jan 6, 2017

При переезде на https получаю timeout, клиент соединяется через wss://

@morozovsk
Copy link
Owner

@ckjet
Copy link
Author

ckjet commented Jan 6, 2017

Опять таймаут
У нас такой конфиг без 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

@olegius88
Copy link

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

@ckjet
Copy link
Author

ckjet commented Jan 6, 2017

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

@olegius88
Copy link

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

@ckjet
Copy link
Author

ckjet commented Jan 6, 2017

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

@olegius88
Copy link

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

@ckjet
Copy link
Author

ckjet commented Jan 6, 2017

Не помогло

@morozovsk
Copy link
Owner

morozovsk commented Jan 6, 2017

Вот ошибка в логе: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 делает необходимое шифрование.

@olegius88
Copy link

вот наш рабочий конфиг
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

@morozovsk
Copy link
Owner

morozovsk commented Jan 6, 2017

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

@ckjet
Copy link
Author

ckjet commented Jan 13, 2017

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

@olegius88
Copy link

поделитесь

@ckjet
Copy link
Author

ckjet commented Jan 13, 2017

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

'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); я ее убрал и все работает отлично.

@borodatych
Copy link

borodatych commented Jun 5, 2017

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

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

$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 ?

@morozovsk
Copy link
Owner

morozovsk commented Jun 6, 2017

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

websocket

@borodatych
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants