Laravel と Socket IO を Nginx にデプロイする

Laravel と Socket IO を Nginx にデプロイする

ソケットIOを使用するLaravelプロジェクトをnginxにデプロイしました

サーバーの仕様は次のとおりです:

NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

ここに私の設定ファイルがあります:

server {
    listen       443 ssl;
    server_name  website.tld;
    proxy_pass_header Server;
    proxy_buffering off;
    server_tokens off;
    
    ssl_certificate      /etc/nginx/ssl/biz/ssl.crt;
    ssl_certificate_key  /etc/nginx/ssl/biz/ssl.key;

    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options nosniff;
    proxy_cookie_path / "/; secure;";
    ssl_prefer_server_ciphers   on;
    server_name_in_redirect on;    
    proxy_buffer_size   128m;
    proxy_buffers   4 256m;
    proxy_busy_buffers_size   256m;



    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
 
    root /home/laravel/public_html/public;
    index  index.php;

    # Requests for socket.io are passed on to Node on port 3000
    location /socket.io {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto  https;
      proxy_set_header X-VerifiedViaNginx yes;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy false;

      proxy_pass http://localhost:3000;
      proxy_redirect off;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }

    location / {
         try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$
    {
       # try_files $uri $uri/ /index.php?$args;
        try_files $uri /index.php$request_uri;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

しかし、アクセスするとhttps://ウェブサイト:3000 ブラウザ上の出力:

このサイトは安全な接続を提供できません。Web サイト.tld から無効な応答が送信されました。ERR_SSL_PROTOCOL_ERROR

私の設定に間違いはありますか?

答え1

Web サイトをロードするには、ポート番号を指定する必要はありません。指定するだけでhttps://website.example十分です。その理由は、nginx がデフォルトの https ポートであるポート 443 で Web サイトを提供しているためです。しかし、nginx をバイパスして (https を使用して) socket.io サーバーに直接アクセスしようとしました。ポート番号を削除すると、代わりにポート 443 で nginx に接続します。

また、セキュリティのために、悪意のあるユーザーが nginx をバイパスして直接接続できないように、socket.io サーバーが localhost 上の接続のみをリッスンするようにする必要があります。

関連情報