wsproxy - ptt/pttbbs GitHub Wiki

開啟 websocket 連線服務

適用於 Debian GNU/Linux 10 或衍生發行版, CentOS/RHEL 8 或衍生發行版; FreeBSD 或其他較舊環境尚未測試

前置作業

除了確認已完整安裝您的 PttBBS 以外, 亦請確認已經安裝以下套件:

  • PttBBS 的 logind -- 高效能登入前導程式 (可參考連結內指示編譯安裝)

下列套件後續會有安裝步驟指示:

  • OpenResty 套件. (安裝完此套件即不須再手動安裝 nginxluaopenssl 等)

安裝 OpenResty 相關套件程式

請參考 OpenResty 官方網站上的 安裝說明

使用 Linux 主流發行版者,可以用套件管理員安裝

初步調整 nginx 相關設定

  • 在 nginx 下加入參考設定內容,並自行調整相關參數與白名單: (建議 listen 的 port 可以設定 > 3000, 減少權限問題發生的可能)
map $http_origin $bbs_origin_checked {
    "http://www.ptt.cc" 1;
    "https://www.ptt.cc" 1;
    "~^app://" 1;
    "~^https?://127\." 1;
    default 0;
}

server {
    location /bbs {
        # Override the lport sent to logind (optional)
        # set $bbs_lport 443;

        # Mark the connection as secure (optional)
        # set $bbs_secure 1;

        set $bbs_logind_addr "unix:/home/bbs/run/logind.connfwd.sock";

        content_by_lua_file /home/bbs/wsproxy/wsproxy.lua;
    }
}

(在開發之 client 中請自行調整白名單)

  • 調整 logind 設定 (至 ~bbs/etc/bindports.conf 編輯)

將以下行取消註解或自行加上:

logind unix 766 run/logind.connfwd.sock

確認權限相關

確認 nginx 有執行 BBS 中 socket 的權限:

www-data 使用者有可進入 BBS 家目錄 (如:/home/bbs ) 的權限

初步測試未加密之 websocket 連線

若在虛擬主機下測試且 host 為 Windows, 可由 Windows 底下可執行的 PCMan 9.5.0 Beta 連線至:

ws://{虛擬主機位置}:{設定的port}/bbs

若在其他作業系統環境測試連線, 則可運用或自行開發其他 client 測試連線效果.

若有顯示登入畫面且可正常登入, 即代表初步測試成功:

但若需達到安全連線之目的, 仍需有其他相關設定.

安全連線相關設定

申請 TLS 憑證

首先需先申請網域名稱,以做為憑證資訊之用

一般 TLS 加密憑證購買資訊請洽相關銷售單位或詢問網域商是否提供此服務,

其他免費 TLS 憑證申請,可參考 https://letsencrypt.tw

TLS 在網頁伺服器的安全性配置設定,可善用 https://ssl-config.mozilla.org

初步調整 nginx 相關設定

  • 在 nginx 下自行調整內容: (port 改成 443, set $bbs_secure 1; 那行取消註解 , 加上 TLS 憑證檔路徑及相關設定)
map $http_origin $bbs_origin_checked {
    "http://www.ptt.cc" 1;
    "https://www.ptt.cc" 1;
    "~^app://" 1;
    "~^https?://127\." 1;
    default 0;
}

server {
    listen 443 default_server;

    # (中間請自行加上 TLS 相關設定, 
    # 其他格式請參考 https://ssl-config.mozilla.org 或 nginx 內建設定)

    # 憑證與金鑰的路徑
    ssl_certificate /path/to/your/nginx.crt;
    ssl_certificate_key /path/to/your/nginx.key;

    location /bbs {
        # Override the lport sent to logind (optional)
        set $bbs_lport 443;

        # Mark the connection as secure (optional)
        set $bbs_secure 1;

        set $bbs_logind_addr "unix:/home/bbs/run/logind.connfwd.sock";

        content_by_lua_file /home/bbs/wsproxy/wsproxy.lua;
    }
}

參考文件