복붙노트

[REDIS] Laravel 에코 서버에서 생산 호스팅의 경우 아파치 역방향 프록시 구성

REDIS

Laravel 에코 서버에서 생산 호스팅의 경우 아파치 역방향 프록시 구성

나는 HTTPS 서버를 통해 laravel 에코 서버를 활용하는 laravel 응용 프로그램을 호스팅 할 필요가있다.

나는 laravel 에코 - 서버가 동일한 도메인 URL 내에서 실행되고있는 곳입니다 포트 6001에 127.0.0.1 내 /socket.io URL 조사를 리디렉션 아파치의 역방향 프록시를 사용하고 싶습니다.

https://example.com 이상 예를 들어 내 laravel 에코 서버는 동일한 도메인 내 http://127.0.0.1:6001로 리디렉션해야 https://example.com/socket.io 아파치에 URL 설문 조사를 보낼 때 .

주의

나는 루트 디렉토리하지만 내의 cPanel에서 하위 디렉토리에 내 laravel 응용 프로그램을 호스팅하고 있지 않다.

내 서버는 VPS 내가 하위 도메인 호스트에서 호스팅하고 그 주요 서버 호스트와는 별도의 IP 주소에서 실행됩니다.

하자 내 주요 호스트가 / 홈 / ... 디렉토리에 고유 한 IP 주소를 가리키는 host.mydomain.com을 말한다. HTTP에이 실행

나는 이제 / 홈 / 국내 / ... 디렉토리에 고유 한 IP 주소를 가리키는으로 domestic.mydomain.com이 내가에서 내 laravel 응용 프로그램을 호스팅하고있어 곳이다. 이 HTTPS에서 실행됩니다.

하지만 내의 cPanel 로그인은 내가 domestic.mydomain.com 파일 관리자에 액세스 host.mydomain.com의 IP 주소입니다

무엇 내 laravel 에코 - server.json의 외모와 같은 :

{
    "authHost": "https://example.com",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "xxxx",
            "key": "xxxxxxxx"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {},
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": false,
    "host": "127.0.0.1",
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "subscribers": {
        "http": true,
        "redis": true
    },
    "apiOriginAllow": {
        "allowCors": false,
        "allowOrigin": "",
        "allowMethods": "",
        "allowHeaders": ""
    }
}

내 laravel 에코를 배포하는 방법 :

import Echo from "laravel-echo";
window.io = require('socket.io-client');
// Have this in case you stop running your laravel echo server
if (typeof io !== 'undefined') {
  window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname,
  });

  window.Echo.channel('session-expired')
  .listen('sessionExpired', (e) => {
    setTimeout(location.reload(), 3000);
  });
}

그리고 내가 laravel 에코 서버를 실행할 때 성공적으로 시작을 처음 상태와 포트 6001에 127.0.0.1에서 실행중인 프로그램

그리고 여기 내 아파치 프록시 구성 /etc/httpd/conf/httpd.conf 파일을 역입니다 :

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# mod_proxy setup.
ProxyRequests Off
ProxyPass /socket.io http://127.0.0.1:6001
ProxyPassReverse /socket.io http://127.0.0.1:6001
<Location "/socket.io">
  Order allow,deny
  Allow from all
</Location>

내 문제는 내가 내 웹 사이트를 열 때 여론 조사가 동시에 확인하고 404 개 응답의 집합을 반환이지만, 내 socket.io 내의 모든 채널에 가입하지 않습니다. 테스트의 많은 후 난 프록시 리디렉션 않는 것으로 생각하지만 난 그것이 내가 원하는 특정 하나를 때리고 의심한다.

내 서버의 구성 404 응답하지 않습니다 내 404을 heres HTML 응답 :

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /</pre>
</body>
</html>

그것은 내 로컬 서버에서 완벽하게 실행하지만 난 내 프로덕션 서버에서 실행 확인해야합니다.

해결법

  1. ==============================

    1.마지막으로 그것을 가지고, 내 laravel 에코 - server.json을 Heres는 :

    마지막으로 그것을 가지고, 내 laravel 에코 - server.json을 Heres는 :

    {
        "authHost": "https://example-domain.com",
        "authEndpoint": "/broadcasting/auth",
        "clients": [
            {
                "appId": "xxxxxxx",
                "key": "xxxxxxxxxxxxxx"
            }
        ],
        "database": "redis",
        "databaseConfig": {
            "redis": {
                "port": "6379",
                "host": "localhost"
            },
            "sqlite": {}
        },
        "devMode": true,
        "host": "localhost",
        "port": "6001",
        "protocol": "http",
        "socketio": {},
        "sslCertPath": "/path/to/ssl/crt/crt.pem", // or .crt
        "sslKeyPath": "/path/to/ssl/key/crt.pem", // or .key
        "sslCertChainPath": "",
        "sslPassphrase": "",
        "subscribers": {
            "http": true,
            "redis": true
        },
        "apiOriginAllow": {
            "allowCors": true,
            "allowOrigin": "*",
            "allowMethods": "GET, POST",
            "allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
        }
    } 
    

    나는 laravel 에코 - server.json을 utitlizes 방법 :

    import Echo from "laravel-echo";
    window.io = require('socket.io-client');
    // Have this in case you stop running your laravel echo server
    if (typeof io !== 'undefined') {
      window.Echo = new Echo({
        broadcaster: 'socket.io',
        host: window.location.hostname,
      });
    
    }
    

    그리고 내 도메인 내에서 SSL 가상 호스트 내에서 내 apaxhe의 설정 :

    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
    RewriteRule /(.*)           ws://localhost:6001/$1 [P,L]
    
    ProxyPass        /socket.io http://localhost:6001/socket.io
    ProxyPassReverse /socket.io http://localhost:6001/socket.io 
    
  2. from https://stackoverflow.com/questions/56866032/configuring-apache-reverse-proxy-for-hosting-laravel-echo-server-on-production by cc-by-sa and MIT license