Ejabberd
埃賈伯德。不同的埠 - 不同的訪問
兩個埠上有一個連接……在 5288 使用者通過瀏覽器的 Web 套接字連接,在 5222 通過正常客戶端連接……當沒有訪問限制時,一切都連接,一切正常……如果我只添加訪問權限到客戶端埠 5222 上的管理員,然後 5288 上的 websocket 開始流動“服務服務拒絕訪問。SASL 綁定失敗。” …問題是,是否可以按埠劃分訪問?我在哪裡可以扭它?
listen: - port: 5288 module: ejabberd_http request_handlers: "/ ws": ejabberd_http_ws web_admin: true - port: 5222 module: ejabberd_c2s # access: # - allow: admin
一段時間後……在伺服器故障星系……
我將使用 ejabberd,所以…我花了一些時間來學習 Erlang。如果我正確理解了所有內容,則可能認為模組“http”和“c2s”的屬性“access”常見。而且,“ejabberd_http”模組根本沒有這個屬性。讀取配置時,始終只採用第一次讀取“ejabberd_c2s”的第一次“訪問”。但是,正如我在問題中所寫,這不是我的情況。我需要“http”和“c2s”的單獨訪問權限。解決問題:
- 只是為了訂單,我創建了一個單獨的文件“ejabberd_http_config.erl”(“ejabberd_c2s_config.erl”的副本),更改了函式“get_c2s_limits/0”:
... get_http_limits() -> HttpListen = ejabberd_config:get_option(listen, []), case lists:keysearch(ejabberd_http, 2, HttpListen) of false -> []; {value, {_Port, ejabberd_http, Opts}} -> select_opts_values(Opts) end. ...
- 在“ejabberd_http.erl”函式的“listen_options/0”函式中添加了元組“{access, all}”。
- 在函式“init/1”中的“ejabberd_http_ws.erl”中,將“Opts = ejabberd_c2s_config: get_c2s_limits () ++ SOpts”行更正為“Opts = ejabberd_http_config: get_http_limits () ++ SOpts”。
然後我簡單地編譯了這3個文件並將替換的模組上傳到伺服器。重新啟動伺服器,瞧。現在您可以分別為“http”和“c2s”設置訪問權限。現在 Gajim(5222 埠)只在管理員登錄下進行連接,同時 websocket(5288 埠)對所有連接都可用(預設為“access:all”,除非明確指定)。