密码保护AWS Node EB应用程序

Tho*_*abe 9 amazon-web-services node.js amazon-elastic-beanstalk

我已启动并运行Node Elastic Beanstalk应用程序(尽管是ELB).现在它只是服务器上的AWS示例节点应用程序.由于这是一个开发服务器,在我将实际代码推送到服务器之前,我需要密码保护整个事情(这将用于客户端审查等).

我在试图弄清楚如何做到这一点时遇到了很多麻烦.似乎应用程序代码被删除,/var/app/并且没有任何内容/var/www/html/(没有隐藏文件)我通常会设置htaccess文件.它使用的是我从未使用过的nginx代理,而且我不确定文件是如何提供的.

锁定此服务器的最佳方法是什么?安全组?htaccess的?别的什么?

小智 17

在Node.js Beanstalk应用程序中,您的实例将其/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf设置如下:

server {
    listen 8080;

    location / {
        proxy_pass  http://nodejs;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    gzip on;
}
Run Code Online (Sandbox Code Playgroud)

你想要的是它的设置如下:

server {
    listen 8080;

    location / {
        proxy_pass  http://nodejs;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
    gzip on;
}
Run Code Online (Sandbox Code Playgroud)

使用/etc/nginx/.htpasswd中的单独密码文件,其中包含您的登录凭据.

第1步: 转到本地linux环境并输入

sudo htpasswd -c .htpasswd someusernameofyourchoice
Run Code Online (Sandbox Code Playgroud)

导航到.htpasswd文件并提取您生成的用户名和密码行.它看起来像这样:

someusernameofyourchoice:$apr1$.1EAU7DD$rt9jdihy1U.cFuBzJTMed.
Run Code Online (Sandbox Code Playgroud)

第2步:

现在在节点应用程序的根目录中(.git /目录所在的位置)创建一个名为.ebextensions /的隐藏目录.

导航到.ebextensions /目录,因为您需要制作2个文件.

第3步:

第一个文件将是配置文件,它将在您的beanstalk应用程序上生成.htpasswd文件.将之前生成的用户名和密码哈希放入此文件中,并按如下方式命名:

00_nginx_htpasswd.config

files:
  "/etc/nginx/.htpasswd" :
    mode: "000755"
    owner: root
    group: root
    content: |
      someusernameofyourchoice:$apr1$.1EAU7DD$rt9jdihy1U.cFuBzJTMed.
Run Code Online (Sandbox Code Playgroud)

第4步:

您将在.ebextensions /目录中创建的第二个文件将更新弹性beanstalk环境中的00_elastic_beanstalk_proxy.conf文件.名称如下:

01_nginx_auth.config

files:
  /tmp/deployment/nginx_auth.sh:
    mode: "000755"
    content: |
        sed -i 's/$proxy_add_x_forwarded_for;/$proxy_add_x_forwarded_for;\n     auth_basic "Restricted";\n  auth_basic_user_file \/etc\/nginx\/.htpasswd;\n/' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
container_commands:
  nginx_auth:
    command: "/tmp/deployment/nginx_auth.sh"
Run Code Online (Sandbox Code Playgroud)

注意: 如果您只希望密码保护在特定环境中,例如您的开发环境.您可以将环境变量传递到您的环境中(在beanstalk仪表板上的配置>软件配置面板中),然后您可以向此文件的命令添加条件,该命令在运行之前检查该环境变量.这样,您可以使用密码保护您的开发环境,同时让您的生产环境免费供公众访问.当您将所有内容都放入git以将其推送到beanstalk环境时,这非常方便.以下是带有这些新增内容的修改文件:

01_nginx_auth.config

files:
  /tmp/deployment/nginx_auth.sh:
    mode: "000755"
    content: |
      if [ "$NODE_ENV" == "development" ]; then
        sed -i 's/$proxy_add_x_forwarded_for;/$proxy_add_x_forwarded_for;\n     auth_basic "Restricted";\n  auth_basic_user_file \/etc\/nginx\/.htpasswd;\n/' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
      fi
container_commands:
  nginx_auth:
    command: "/tmp/deployment/nginx_auth.sh"
Run Code Online (Sandbox Code Playgroud)

第5步:

一旦在.ebextensions /目录中创建了这两个文件,就提交它们并将它们推送到弹性beanstalk.现在应该提示您输入在步骤1中生成的用户名和密码组合.


rga*_*eth 3

安全组只会根据源IP进行阻止,nginx不支持htaccess。相反,他们支持这样的配置:

server {
    ...
    auth_basic "closed website";
    auth_basic_user_file conf/htpasswd;
}
Run Code Online (Sandbox Code Playgroud)

但要实现这一点,您需要使用 elastic beanstalk.ebextensions来修改默认的 nginx 配置。这一点都不容易。

对您来说最快的方法可能是在您的节点应用程序本身中支持 HTTP 身份验证。有很多指南,但这里有一个: http: //www.sitepoint.com/http-authentication-in-node-js/