Когда мы локально настраиваем laravel -websockets в docker, все работает замечательно; однако, когда все это подтолкнуло, проблемы возникли. Следовательно, мы должны разделить наш основной сайт на один сервер, а сервер веб-сокетов на другой сервер. Все эти сайты находятся в корпоративной внутренней сети и не используют SSL.
Итак, основное приложение - Laravel 6, работающее в Centos, Apache 2.4 и PHP 7.3. Он может подключаться к серверу веб-сокетов, но в любое время laravel передает событие, мы получаем ошибку 404 для этой конечной точки:
apps/XXXXXX/events?auth_key=XXXXXXX&auth_signature=XXXXXXX&auth_timestamp=XXXX&auth_version=1.0&body_md5=XXXXX
Сервер веб-сокетов - Centos, PHP 7.3, Nginx 1.8 настроить в качестве обратного прокси-сервера, используя пример файла конфигурации spaties / outsidecodes.
map $http_upgrade $type {
default "web";
websocket "ws";
}
server {
listen 80;
server_name XXXXXXXXX;
root /opt/rh/rh-nginx18/root/usr/share/nginx/www/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files /nonexistent @$type;
}
location @web {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 500 502 503 504 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location @ws {
proxy_pass http://127.0.0.1:6001;
proxy_set_header Host $host;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_redirect off;
# Allow the use of websockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Вся моя команда новичок в nginx, поэтому мы полагаем, что там, вероятно, есть проблема или что-то еще, что у нас есть неправильно настроен Мы знаем, что наши события и трансляция в основном приложении laravel правильная, потому что он работал, когда все было запущено в одном кластере Apache. Наша проблема заключалась в том, что корпорация не открывала бы порт в брандмауэре, кроме 80 и 443. Мы решили разделить трафик c на 80 с nginx согласно документации за пределами кода.
Любые мысли по этому поводу ? Мы в растерянности. Спасибо всем!
Редактировать:
Я должен добавить, что мы используем Laravel Echo with Pusher. JS для внешнего интерфейса:
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
wsHost: 'XXXXXXXXXX',
wsPort: 80,
disableStats: true
});