Ejabberd

埃賈伯德。不同的埠 - 不同的訪問

  • February 19, 2019

兩個埠上有一個連接……在 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”的單獨訪問權限。解決問題:

  1. 只是為了訂單,我創建了一個單獨的文件“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.
...
  1. 在“ejabberd_http.erl”函式的“listen_options/0”函式中添加了元組“{access, all}”。
  2. 在函式“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”,除非明確指定)。

引用自:https://serverfault.com/questions/947567