Как настроить работу вебсокетов с контейнерами 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; }