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中生成的用户名和密码组合.
安全组只会根据源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/
| 归档时间: |
|
| 查看次数: |
2598 次 |
| 最近记录: |