Я разворачиваю сайты WordPress и Discourse (с собственным хостингом) с помощью плагина WP-Discourse.
Мне удалось успешно включить базовую аутентификацию HTTP на обоих сайтах, чтобы предотвратить их доступность до момента публикации (эффективно блокируя доступ как для широкой публики, так и для поисковых систем).
WordPress (информация для тех, кто хочет добиться аналогичного результата)
Создан файл .htpasswd с пользователем и соответствующим паролем
Плагин 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 (и я оказался прав насчёт этого!). Если бы у вас всё получилось, вы бы не писали это сообщение.
Для тестовых сайтов Discourse я обычно просто включаю опцию «требуется вход», и это отпугивает поисковые системы. Человек с логином всё ещё может войти, но обычно именно этого и нужно.
Если недопустимо, что ваши сайты доступны любому, возможно, вам стоит использовать брандмауэр и ограничить доступ по вашему IP-адресу.
Спасибо, эта подсказка помогла мне решить проблему. Вот обновлённый раздел базовой аутентификации в файле 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 теперь отображает: