Closed ckjet closed 7 years ago
Опять таймаут У нас такой конфиг без ssl: location /websocket {
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 {
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
Здравствуйте. А вы не замеряли время, за которое отрабатывает ваш код на стороне сервера? может дело в том, что много времени уходит на работу php?
Если использовать http, то все работает, но на https вот так. Не думаю что в этом дело.
а у вас в секции server { ssl_certificate .ssl/geotrust.amix24.com.crt; ssl_certificate_key .ssl/geotrust.amix24.com.key; } подобные записи есть? то есть, сам ssl сертификат подключили?
Сертификат подключен и работает.
попробуйте в адресе прописать wss://.../websocket:443
Не помогло
Вот ошибка в логе: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 делает необходимое шифрование.
вот наш рабочий конфиг 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
ок. скиньте конфиг и опишите случай, в котором у вас работает. скиньте полный конфиг (с секцией sever и port), в неработающем случае скиньте полный конфиг (с секцией sever и port), в работающем случае кто выдаёт ошибку и какую в случае не работающего
Решил через саму библиотеку, через nginx не получалось
поделитесь
при инициализации я добавил опции:
'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); я ее убрал и все работает отлично.
Здравствуйте.
Конфиг веб-сокет сервера:
$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 ?
Что, кстати, указывать в proxy_pass - адрес:порт с websocket или localsocket ?
websocket
От себя хочу добавить, что если у кого то не заводится, то попробуйте это реализовать на другом домене/поддомене. У нас, к примеру, на основном куча всего накручено, и не заработало. На чистеньком поддомене, все гуд.
При переезде на https получаю timeout, клиент соединяется через wss://