Создание нового сообщества: Basic Auth нарушает работу плагина WP-Discourse

Я разворачиваю сайты WordPress и Discourse (с собственным хостингом) с помощью плагина WP-Discourse.

Мне удалось успешно включить базовую аутентификацию HTTP на обоих сайтах, чтобы предотвратить их доступность до момента публикации (эффективно блокируя доступ как для широкой публики, так и для поисковых систем).

WordPress (информация для тех, кто хочет добиться аналогичного результата)

Discourse

Плагин WP-Discourse работает корректно, пока на сервере Discourse не включена базовая аутентификация.

(Редактирование) Вот ошибка в логе плагина WP-Discourse на стороне WordPress: [2025-02-14 18:20:06] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"An invalid response was returned from Discourse","http_code":401,"http_body":"<html>\r\n<head><title>401 Authorization Required</title></head>\r\n<body>\r\n<center><h1>401 Authorization Required</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n"}

Есть ли у кого-нибудь идеи, как исключить API из требования базовой аутентификации HTTP на Discourse?

Спасибо!

Вы действительно это сделали? Я не уверен, что Discourse будет работать за базовой аутентификацией; я пытался один раз, но бросил. Кажется, ещё более вероятно, что это может сломать wp-discourse (и я оказался прав насчёт этого!). Если бы у вас всё получилось, вы бы не писали это сообщение. :wink:

Для тестовых сайтов Discourse я обычно просто включаю опцию «требуется вход», и это отпугивает поисковые системы. Человек с логином всё ещё может войти, но обычно именно этого и нужно.

Если недопустимо, что ваши сайты доступны любому, возможно, вам стоит использовать брандмауэр и ограничить доступ по вашему IP-адресу.

Можете ли вы настроить базовую аутентификацию так, чтобы разрешать доступ с IP-адреса вашего сервера Discourse? Возможно: Allow access from one IP, require basic auth from all other sources - Traefik v2 - Traefik Labs Community Forum

Спасибо, эта подсказка помогла мне решить проблему. Вот обновлённый раздел базовой аутентификации в файле app.yml на моём сервере Discourse (изменения на сервере WordPress не потребовались):

# basic auth
  after_bundle_exec:
    - replace:
       filename: "/etc/nginx/conf.d/discourse.conf"
       from: "# Allow bypass cache from localhost"
       to: |
            # Allow bypass basic authentication for WP-Discourse plugin
            geo $authentication {
            default "Credentials you must provide.";
            127.0.0.1 "off";
            151.101.3.55/32 "off";
            }
            # Allow bypass cache from localhost
    - replace:
       filename: "/etc/nginx/conf.d/discourse.conf"
       from: "# auth_basic on"
       to: "auth_basic $authentication"
    - replace:
       filename: "/etc/nginx/conf.d/discourse.conf"
       from: "# auth_basic_user_file /etc/nginx/htpasswd"
       to: "auth_basic_user_file /etc/nginx/htpasswd"
    - replace:
       filename: "/etc/nginx/conf.d/discourse.conf"
       from: "location = /srv/status {"
       to: "location = /srv/status {
           auth_basic off;"
    - file:
       path: "/etc/nginx/htpasswd"
       contents: |
         alfred:$apr1$jSdLuHyZ$faWxYGjnmLd/zRC6UMsRs1

151.101.3.55 — это (пример) публичный IP-адрес моего сервера WordPress. WP-Discourse теперь отображает:
На пустом экране отображается текст в зелёной рамке: «Вы подключены к Discord!» (Подпись сгенерирована ИИ)