Elastic Beanstalk上Nginx服务器上的基本身份验证

时间:2014-06-09 18:40:00

标签: nginx amazon-ec2 load-balancing elastic-beanstalk

我正在尝试在运行nodejs的弹性beanstalk实例上设置基本身份验证,但是,我似乎无法使其工作。我已遵循本指南Nginx Server on Amazon EC2,但http流量仍然通过nginx实例。我认为这是因为ec2实例上的nginx服务器不是我需要更改virtual.conf文件的服务器。我认为nginx服务器完全在另一个实例上,但我似乎无法找到它。我认为这是因为当我ping我的站点的域名时,它的IP是nginx服务器而不是我的弹性IP。有关如何配置nginx以限制在Elastic beanstalk上访问我网站的http和https流量的任何想法?

2 个答案:

答案 0 :(得分:1)

虽然这不是您问题的直接答案,但我在寻找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

请注意,这并不理想,因为您最终在回购的源代码中拥有密码保护......但是,我无法在任何地方找到更好的方法。我目前正在探索将HTTP Auth烘焙到ec2实例中,将实例保存为AMI,并将该AMI用于我的beanstalk中自动生成的实例。

甚至不让我开始在s3存储桶前面使用HTTP Auth,AWS不支持这种情况,并要求您将DNS指向第三方服务!

答案 1 :(得分:0)

管理Elastic Beanstalk的nginx Basic身份验证的关键因素是要识别conf文件是由beantalk管理的,因此,在对其进行修改时,需要在/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"