【问题标题】:Basic Auth on Nginx server on Elastic BeanstalkElastic Beanstalk 上 Nginx 服务器上的基本身份验证
【发布时间】:2014-07-30 08:57:09
【问题描述】:
我正在尝试在运行 nodejs 的弹性 beanstalk 实例上设置基本身份验证,但是,我似乎无法使其正常工作。我已按照本指南Nginx Server on Amazon EC2 进行操作,但 http 流量仍在通过 nginx 实例。我认为这是因为 ec2 实例上的 nginx 服务器不是我需要更改 virtual.conf 文件的服务器。我认为 nginx 服务器完全在另一个实例上,但我似乎找不到它。我认为这是因为当我 ping 我的站点的域名时,它的 IP 是 nginx 服务器的 IP,而不是我的弹性 IP。关于如何配置 nginx 以限制我在 Elastic beanstalk 上网站的 http 和 https 流量的任何想法?
【问题讨论】:
标签:
nginx
amazon-ec2
load-balancing
amazon-elastic-beanstalk
【解决方案1】:
管理Elastic Beanstalk的nginx Basic auth的关键是要识别conf文件是beanstalk管理的,所以修改的时候需要编辑/tmp/deployment/config中的文件。那里的所有文件都将被复制到目的地,目的地是通过将文件名的# 字符替换为/ 来计算的。而且由于/tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf文件不是在commands这一步创建的,所以需要在container_commands这一步修改。
对我来说,以下工作。
files:
/etc/nginx/.htpasswd:
mode: "000755"
owner: root
group: root
# the content of htpasswd.
# Obtain it by `htpasswd -nb USER PASSWORD`
content: "USER_NAME:HASHED_PASS"
container_commands:
add-basic:
command: |
set -ex
EB_CONFIG_STAGING_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k config_staging_dir)
file_name="${EB_CONFIG_STAGING_DIR}/$(echo /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf | sed -e 's|/|#|g')"
sed -i -e '
/location \// {
s|$|\nauth_basic "Restricted Area";\nauth_basic_user_file /etc/nginx/.htpasswd;|
:loop
n
b loop
}' "$file_name"
【解决方案2】:
虽然这不是您问题的直接答案,但我在为 AWS 的 HTTP 基本身份验证查找资源时遇到了很多麻烦。
我最终从 Nginx 切换到 Apache,并在 PROJECT_ROOT/.ebextensions/apache.conf 中使用了这个配置:
files:
"/etc/httpd/conf.d/allow_override.conf":
mode: "000644"
owner: ec2-user
group: ec2-user
encoding: plain
content: |
<Directory /var/app/current/>
AllowOverride AuthConfig
</Directory>
"/etc/httpd/conf.d/auth.conf":
mode: "000644"
owner: ec2-user
group: ec2-user
encoding: plain
content: |
<Directory /var/app/current/>
AuthType Basic
AuthName "Myproject Prototype"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
</Directory>
"/etc/httpd/.htpasswd":
mode: "000644"
owner: ec2-user
group: ec2-user
encoding: plain
content: |
myusername:mypassword-generated-by-htpasswd
请注意,这并不理想,因为您最终会在 repo 的源代码中使用密码保护...但是,我无法在任何地方找到更好的记录方式。我目前正在探索将 HTTP Auth 烘焙到 ec2 实例中,将实例保存为 AMI,并将该 AMI 用于在我的 beanstalk 中自动生成的实例。
甚至不要让我开始在 s3 存储桶前进行 HTTP Auth,AWS 不支持它,并且需要您将 DNS 指向第三方服务!