【问题标题】: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 指向第三方服务!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 1970-01-01
        • 2015-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多