使用HTTP基本认证限制对您的Discourse站点的访问

有时,您还不希望公众能够访问您的 Discourse 实例,例如在为迁移搭建测试站点时。

注意:我最近在使用基本认证(basic-auth)时遇到了一些问题,其中一些静态资源未能加载。也许更简单的做法是通过在 app.ymlenv 部分添加 DISCOURSE_LOGIN_REQUIRED: true 来将站点配置为需要登录。

以下设置将显示一个简单的浏览器确认对话框,要求所有访客输入用户名和密码,在访问站点之前必须提供这些信息。

:information_source: 注意:用户仍然需要进行正常的 Discourse 注册和登录。

基本认证凭据

生成加密密码

htpasswd -bn =username= =password=

注意:您需要 htpasswd 工具。在 Ubuntu/Debian 系统中,它包含在 apache2-utils 包中。如果您可以访问另一台已安装 htpasswd 的机器,也可以在那里运行该命令。如果您的目标仅仅是阻止搜索引擎,那么使用此处示例中的密码没有任何问题。

加密后的用户名/密码放在此处

添加到 app.yml

# 基本认证
  after_bundle_exec:
    - replace:
       filename: "/etc/nginx/conf.d/discourse.conf"
       from: "# auth_basic on"
       to: "auth_basic on"
    - 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: |
         =auth_string=    

after_bundle_exec 部分会修改 Discourse 容器内部 nginx 的配置。当您准备正式上线时,只需删除此部分并重新构建即可。

14 个赞