无法使用 Forge、nginx 和 AWS 连接到 Laravel Websocket

Posted

技术标签:

【中文标题】无法使用 Forge、nginx 和 AWS 连接到 Laravel Websocket【英文标题】:Unable to connect to Laravel Websockets with Forge, nginx & AWS 【发布时间】:2019-11-16 12:45:01 【问题描述】:

几个月来一直坚持这一点。向后遵循所有教程。它在宅基地本地运行良好,但我被困在生产中,是时候寻求帮助了。

端口 6001 和 6002 在 Forge 和 AWS 安全组上开放。

在服务器上运行php artisan websockets:serve之后

在开发工具控制台中,我不再看到任何错误,但如果我输入

window.Echo.connector.pusher.connection.timeline.events

我明白了

0: instances: 1, timestamp: 1573858516537
1: state: "connecting", params: undefined, timestamp: 1573858516540 
2: cached: true, transport: "ws", latency: 37966, timestamp: 1573858516558
3: cid: 1, transport: "wss", timestamp: 1573858516565
4: cid: 1, state: "initialized", params: undefined, timestamp: 1573858516565
5: cid: 1, state: "connecting", params: undefined, timestamp: 1573858516580
6: cid: 1, state: "open", params: undefined, timestamp: 1573858547531
7: state: "unavailable", params: undefined, timestamp: 1573858547707
8: state: "disconnected", params: undefined, timestamp: 1573858548832
9: cid: 1, state: "closed", params: …, timestamp: 1573858548887

应该是(取自一个工作示例)

0: instances: 1, timestamp: 1573859945413
1: state: "connecting", params: undefined, timestamp: 1573859945413
2: cid: 1, transport: "wss", timestamp: 1573859945419
3: cid: 1, state: "initialized", params: undefined, timestamp: 1573859945419
4: cid: 1, state: "connecting", params: undefined, timestamp: 1573859945422
5: cid: 1, state: "open", params: undefined, timestamp: 1573859945661
6: state: "connected", params: …, timestamp: 1573859945664

真的希望有人能帮忙,这是我的配置

广播.php

'pusher' => [
     'driver' => 'pusher',
     'key' => env('PUSHER_APP_KEY'),
     'secret' => env('PUSHER_APP_SECRET'),
     'app_id' => env('PUSHER_APP_ID'),
     'options' => [
         'cluster'    => env('PUSHER_APP_CLUSTER'),
         'encrypted'  => true,
         'host'       => '127.0.0.1',
         'port'       => 6001,
         'scheme'     => 'http'
     ],
 ],

websockets.php

'apps' => [
    [
        'id' => env('PUSHER_APP_ID'),
        'name' => env('APP_NAME'),
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'enable_client_messages' => false,
        'enable_statistics' => true,
    ]
],

'local_cert' => null,
'local_pk' => null,
'passphrase' => null,

bootstrap.js

import Echo from 'laravel-echo';

window.Pusher = require('pusher-js');

window.Echo = new Echo(
    broadcaster: 'pusher',
    key: 'my-key',
    wsHost: window.location.hostname,
    wsPort: 6002,
    wssPort: 6002,
    disableStats: false,
    encrypted: true,
    enabledTransports: ['ws', 'wss'],
);

nginx

# FORGE CONFIG (DOT NOT REMOVE!)
include forge-conf/mysite.com/before/*;

server 
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name mysite.com;
    root /home/forge/mysite.com/public;

    # FORGE SSL (DO NOT REMOVE!)
    ssl_certificate /etc/nginx/ssl/mysite.com/int/server.crt;
    ssl_certificate_key /etc/nginx/ssl/mysite.com/int/server.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers abcd
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/dhparams.pem;

    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;

    # FORGE CONFIG (DOT NOT REMOVE!)
    include forge-conf/mysite.com/server/*;

    location / 
        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; 

    access_log off;
    error_log  /var/log/nginx/mysite.com-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ 
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    

    location ~ /\.(?!well-known).* 
        deny all;
    


server 
    listen 6002 ssl;
    listen [::]:6002 ssl;
    server_name mysite.com;
    root /home/forge/mysite.com/public;

    # FORGE SSL (DO NOT REMOVE!)
    ssl_certificate /etc/nginx/ssl/mysite.com/int/server.crt;
    ssl_certificate_key /etc/nginx/ssl/mysite.com/int/server.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers abcd
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/dhparams.pem;

    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;

    # FORGE CONFIG (DOT NOT REMOVE!)
    include forge-conf/mysite.com/server/*;

    location / 
        proxy_pass             http://127.0.0.1:6001;
        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 = /favicon.ico  access_log off; log_not_found off; 
    location = /robots.txt   access_log off; log_not_found off; 

    access_log off;
    error_log  /var/log/nginx/mysite.com-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ 
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    

    location ~ /\.(?!well-known).* 
        deny all;
    


# FORGE CONFIG (DOT NOT REMOVE!)
include forge-conf/mysite.com/after/*;

【问题讨论】:

【参考方案1】:

在注册一个新的推送者帐户并清除配置缓存后,终于可以正常工作了。有时需要大声说出来才能弄清楚

【讨论】:

以上是关于无法使用 Forge、nginx 和 AWS 连接到 Laravel Websocket的主要内容,如果未能解决你的问题,请参考以下文章

letsencrypt,nginx,aws和nodejs无法设置

AWS 部署 NGINX 连接被拒绝用于 Node.JS 项目

使用 TCP TLS 到 Nginx 的 AWS 经典负载均衡器

AWS Nginx“从上游读取响应标头时上游过早关闭连接”

AWS Cloud 9 运行 2 台服务器 Autodesk forge 项目

尝试发布 Autodesk Forge Design Automation 应用程序包时出现 AWS 错误