Laravel 廣播伺服器配置


建立時間: 2024年6月4日 12:25
更新時間: 2024年10月16日 16:37

說明

本篇文章主要分享廣播伺服器配置。

廣播驅動程式

這裡使用 Laravel Reverb

Reverb Env

REVERB_APP_ID=my-app-id
REVERB_APP_KEY=my-app-key
REVERB_APP_SECRET=my-app-secret
# 此專案主機
REVERB_HOST="enjoy.com"
# 此專案主機 Port
REVERB_PORT=80
# 此專案超文字傳輸通訊協定
REVERB_SCHEME=http
# 廣播驅動程式 Port
# 例如: 0:0:0:0:8080。REVERB_PORT 就是8080,8080簡寫80
REVERB_SERVER_PORT=80

根據自己的伺服器調整 REVERB_HOST, REVERB_PORT, REVERB_SCHEME。

Laravel Echo

import Echo from 'laravel-echo';

import Pusher from 'pusher-js';
window.Pusher = Pusher;

window.Echo = new Echo({
    broadcaster: 'reverb',
    // Reverb key
    key: import.meta.env.VITE_REVERB_APP_KEY,
    /**
     * 此主機為指向廣播驅動程式,而非後端專案的主機
     * 例如: ws.enjoy.com 反向代理指向 0.0.0.0:8080
     */
    wsHost: 'ws.enjoy.com',
    // 反向代理的 http port,例如: ws.enjoy.com 反向代理使用 80 port,wsPort 就是 80
    wsPort: 80,
    // 反向代理的 https port
    wssPort: 443,
    forceTLS: (import.meta.env.VITE_REVERB_SCHEME ?? 'https') === 'https',
    enabledTransports: ['ws', 'wss'],
    auth: {
        headers: {
            // jwt 身分驗證,一般身分驗證可以不用另外寫
            Authorization: `Bearer jwt token`,
        }
    },
    // 後端專案的廣播驗證路由,前後端分離的話記得設定
    authEndpoint: 'http://enjoy.com/broadcasting/auth'
});

這裡設定官方文件都是用 import.meta.env.* 變數的方式,為了讓讀者了解要設定什麼內容,有些我直接使用純文字的方式。

有關廣播驅動程式反向代理請參考底下的相關文章

Apache Laravel 反向代理

<VirtualHost *:80>
    ServerName enjoy.com
    ServerAdmin webmaster@localhost
    DocumentRoot path/to/laravel/public/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <IfModule mod_proxy.c>
        RewriteEngine On
        RewriteCond %{REQUEST_URI} ^/app
        RewriteRule ^(.*)$ http://0.0.0.0:8080/$1 [P]

        <Proxy http://0.0.0.0:8080>
            ProxyPreserveHost On
            ProxyPassReverse /
            ProxyPassReverseCookiePath / /app
        </Proxy>
    </IfModule>
</VirtualHost>

基本上是在 Apache Laravel 的 VirtualHost 裡面加上一段代理,主要為 <IfModule mod_proxy.c> 區塊,先檢查是否有開啟 proxy module,有的話再進行廣播的反向代理。

  • RewriteEngine: 開啟重寫引擎,允許你根據規則改變請求的 URL
  • RewriteCond: 重寫條件,只有當請求的 URI 以 /app 開頭時,下面的重寫規則才會生效。
  • RewriteRule: 重寫規則
  • ^(.*)$ 匹配整個 URI。
  • $1 代表匹配的 URI。
  • [P] 標誌表示使用代理(proxy)功能
  • ProxyPreserveHost: 使用傳入的 Host HTTP 請求標頭進行代理請求,也就是假設原本標頭 Host 是 abc.com 它將不會被更改。
  • ProxyPassReverse: 調整從反向代理伺服器傳送的 HTTP 回應標頭中的 URL,也就是回應標頭的 URL 會從 0.0.0.0:8000 改成 enjoy.com
  • ProxyPassReverseCookiePath: 此指令重寫 Set-Cookie 標頭中的路徑字串,從 / 重寫為 /app。

同源政策

若需跨域進行廣播驗證,記得將 broadcasting/auth 添加進 cors.phppaths

cors.php

<?php

return [
    'paths' => ['broadcasting/auth'],
];

參考

觀看次數: 708
broadcastbroadcastinglaravelreverbwebsocket廣播
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!