Как настроить работу вебсокетов с контейнерами nginx + php-fpm + mysql + memcached + push&pull v2.0?
Для обеспечения корректной работы websocket в Bitrix24 с помощью nginx и php-fpm потребуется следующие настройки: 1. Установите и настройте nginx с поддержкой websocket. Для этого добавьте следующую конфигурацию в ваш файл конфигурации nginx: ``` server { listen 80; server_name your_domain.com; location / { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` 2. Настройте php-fpm для поддержки websocket. Для этого отредактируйте файл php.ini и установите следующие параметры: ``` cgi.fix_pathinfo=0 fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; ``` 3. Перезапустите nginx и php-fpm после внесения изменений. Для настройки работы вебсокетов с контейнерами nginx + php-fpm + mysql + memcached + push&pull v2.0 потребуется создать специальную среду для работы с вебсокетами. 1. Установите и настройте контейнеры nginx, php-fpm, mysql, memcached и push&pull v2.0. Для этого можно воспользоваться docker-compose или другим инструментом управления контейнерами. 2. Пропишите соответствующие настройки в ваш файл конфигурации nginx, а также в конфигурации php-fpm. 3. Убедитесь, что все контейнеры имеют доступ друг к другу и правильно сконфигурированы для работы с вебсокетами. 4. Перезапустите все контейнеры после внесения изменений. Следуя этим шагам, вы сможете настроить работу вебсокетов с контейнерами nginx + php-fpm + mysql + memcached + push&pull v2.0 и обеспечить корректную работу websocket в Bitrix24.
https://nginx.org/ru/docs/http/ngx_http_rewrite_mo...
Директивы break, if, return, rewrite и set обрабатываются в следующем порядке:
последовательно выполняются директивы этого модуля, описанные на уровне server;
в цикле:
ищется location по URI запроса;
последовательно выполняются директивы этого модуля, описанные в найденном location;
цикл повторяется, если URI запроса изменялся, но не более 10 раз.
server { if (!-e $request_filename) { rewrite ^(.*)$ /bitrix/urlrewrite.php last; } location ~* ^/bitrix/subws/ { proxy_pass http://push-upstream; ... }
Тут первыми выполняютсяif
иrewrite
, описанные на уровнеserver
.
URI запроса меняется на /bitrix/urlrewrite.php и только потом начинается поиск подходящего location.
Так что вlocation ~* ^/bitrix/subws/ {
запрос уже никогда не попадёт.
If is Evil... when used in location context
Сочетание if + try_files работает криво.
location / { if (-f /var/www/bitrix/index.php) { root /var/www/bitrix; break; } if (-f /var/www/bitrix/bitrixsetup.php) { root /var/www/bitrix; break; } if (-f /var/www/bitrix/restore.php) { root /var/www/bitrix; break; } try_files $uri $uri/ @bitrix; root /var/www/bitrix; } location @bitrix { fastcgi_pass php-upstream;
Так как не работает try_files, то запрос не может попасть вlocation @bitrix
. В итоге ошибка 404.
Нужно убрать:
if (-f /var/www/bitrix/index.php) { root /var/www/bitrix; break; } if (-f /var/www/bitrix/bitrixsetup.php) { root /var/www/bitrix; break; } if (-f /var/www/bitrix/restore.php) { root /var/www/bitrix; break; }
if (!-e $request_filename) { rewrite ^(.*)$ /bitrix/urlrewrite.php last; }