Laravel -Вебсокеты, Nginx, Docker, Apache Mesos и другие в этом стеке - ошибка 404 - PullRequest
4 голосов
/ 03 апреля 2020

Когда мы локально настраиваем 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...