由于 Discourse 不使用 Apache,如何像使用 .htaccess(Apache)那样保护例如预发布环境(运行 Discourse Docker 的 Digital Ocean Droplet)的密码访问?
没有 Apache,但 NGINX 在 Discourse 容器中运行。此主题可能有所帮助:
完美,谢谢 @david ![]()
刚刚添加了,但现在来自 https://cdn-uploads.example.com 和 https://cdn-origin.example.com 的所有图片都需要输入认证密码。有没有办法只保护 https://discourse.example.com?
否则我现在会看到:
我不太确定具体如何实现,但如果有人有其他想法,可能会加入讨论。通过一些对 nginx 配置的调整,这应该是可行的。
作为临时解决方案,而且既然这是一台测试服务器,您能否直接禁用 CDN?如果您使用相同的域名来提供资源,它们将自动携带认证头,这样您就不需要再次输入认证密码了。
当然可以,如果这是针对使用 S3 存储桶进行备份和上传、同时使用 CloudFront 作为 CDN 和源站的生产环境的推荐做法,那么对于预发布环境来说,确实没有必要完全配置所有这些组件。
此次 Nginx 更改显然不会影响 S3 上传或 S3 CDN。Nginx 在此完全不参与。我原以为您使用的是带有 CDN 的本地上传?
理想的情况是使预发布站点的配置与生产站点完全一致。
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: us-east-1
DISCOURSE_S3_ACCESS_KEY_ID: XXXXXXXXXXXXXXXXXXXXXX
DISCOURSE_S3_SECRET_ACCESS_KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
DISCOURSE_S3_CDN_URL: https://cdn-uploads.example.com
DISCOURSE_S3_BUCKET: example-uploads
DISCOURSE_S3_BACKUP_BUCKET: example-backup
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_CDN_URL: https://cdn-origin.example.com
目前,预发布环境的主域名是 https://staging.example.com
尽管如此,当我使用上述代码访问 https://staging.example.com 时,每次请求都会从 cdn-origin 触发身份验证提示。
针对遇到相同问题的用户更新:
我们不得不在 CloudFront 中为 cdn-origin 放行 Authorization 头部。
看来我在 cdn-uploads 时并未被提示进行身份验证。
现已解决。
我在预发布站点上启用了登录验证。您可以通过在 app.yml 中设置环境变量来实现,这样可以保持配置持久化。
如果 Google 或其他人能找到该网站,那就不够好。不管怎样,现在可以用了。
他们会看到网站,但无法查看任何内容。对吗?
在我们的案例中,我们还需要能够查看网站对匿名用户的反应。所以没问题,现在 basic_auth 已经可以正常工作了。
好吧,你让我重新思考我该怎么做!
这里有一个建议,也是我们的做法。
如果你将预发布环境部署在 Apache2(或 Nginx)后面作为反向代理,你就可以像在熟悉的 .htaccess 中那样,在反向代理中设置访问规则。
将 Discourse 部署在反向代理后面有诸多优势,访问控制的便捷性只是其中之一。
希望这能帮到你。
有没有一份万无一失的 Nginx 操作指南?我们通过 DigitalOcean 的 Droplet 和 Docker 进行托管。
你好 @Terrapop
Meta 上有很多优秀的教程,介绍了如何在反向代理后面以“双容器”配置设置 Discourse。
你可以在 Meta 上搜索:
two container reverse proxy
希望这能帮到你。
请注意,对于简单的测试环境,许多人并不设置“双容器”,而仅在生产环境中这样做;但如果你希望测试环境与生产环境“完全一致”,那么“双容器”确实是一个很好的选择。不过,你并不需要“双容器”就能在反向代理后面运行 Web 应用。我经常在生产环境和开发环境中都在反向代理后面运行 Ruby on Rails 和 Docker Web 应用。
你好。我想知道如何在 CloudFront 中正确设置授权头的白名单?我在 app.yml 中按上述说明添加了 “auth_basic”。通过桌面浏览器访问时密码保护功能正常,但通过移动设备访问时(输入用户名和密码后)却出现以下问题:
我的 “cdn-origin” 配置如下:
“whitelist-authorization-headers” 策略:
我对 CloudFront 还不太熟悉,可能只是遗漏了某个非常明显的配置(针对移动端的设置)。




