我有一个Node.js驱动的网站,我正在亚马逊弹性豆茎上运行。
我的Node.js应用程序在端口8080上侦听,我正在使用nginx弹性负载均衡器配置我的EB应用程序,在端口80和443上侦听HTTP和HTTPS。
然而,我只想在我的应用程序中接受通过HTTPS传输的流量。
我可以在应用程序中安装一些东西来处理这个问题,但我感兴趣的是一种让负载均衡器通过HTTPS将所有HTTP请求重定向到我的网站的方法。
您可以通过节点处理重定向。js应用。
当客户端连接不安全时,Amazon发送的X-Forwarded-Proto
头等于http
。
在初始化Express
之后和定义路由以自动将客户端重定向到相应的HTTPSendpoint之前,应立即插入以下中间件:
// Redirect to HTTPS
app.use(function (req, res, next) {
// Insecure request?
if (req.get('x-forwarded-proto') == 'http') {
// Redirect to https://
return res.redirect('https://' + req.get('host') + req.url);
}
next();
});
被接受的答案不再适用于我。默认端口是另一个。配置文件的位置也发生了变化。我正在用Puma建立一个Ruby On Rails应用程序。
我和付费支持人员谈过,我们通过在运行的实例上手动运行命令就解决了这个问题。然后我想出了下面的解决方案。只需登录并重新启动nginx,一切都正常了。
files:
"/tmp/45_nginx_https_rw.sh":
owner: root
group: root
mode: "000644"
content: |
#! /bin/bash
CONFIGURED=`grep -c "return 301 https" /opt/elasticbeanstalk/support/conf/webapp_healthd.conf`
if [ $CONFIGURED = 0 ]
then
sed -i '/listen 80;/a \ if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }\n' /opt/elasticbeanstalk/support/conf/webapp_healthd.conf
logger -t nginx_rw "https rewrite rules added"
exit 0
else
logger -t nginx_rw "https rewrite rules already set"
exit 0
fi
container_commands:
00_appdeploy_rewrite_hook:
command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/appdeploy/enact
01_configdeploy_rewrite_hook:
command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact
02_rewrite_hook_perms:
command: chmod 755 /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh
03_rewrite_hook_ownership:
command: chown root:users /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh
请注意我是如何更改端口号和配置文件的位置的。
在亚马逊付费支持的几次错误启动后,他们最终还是成功了。实现这一目标的方法是配置环境以响应端口80和443。然后在您的主Node.js应用文件夹中创建一个名为的文件夹。eb扩展
,然后在其中放置一个名为00_nginx_https_rw.config
的文件,内容如下:
files:
"/tmp/45_nginx_https_rw.sh":
owner: root
group: root
mode: "000644"
content: |
#! /bin/bash
CONFIGURED=`grep -c "return 301 https" /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf`
if [ $CONFIGURED = 0 ]
then
sed -i '/listen 8080;/a \ if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }\n' /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
logger -t nginx_rw "https rewrite rules added"
exit 0
else
logger -t nginx_rw "https rewrite rules already set"
exit 0
fi
container_commands:
00_appdeploy_rewrite_hook:
command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/appdeploy/enact
01_configdeploy_rewrite_hook:
command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact
02_rewrite_hook_perms:
command: chmod 755 /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh
03_rewrite_hook_ownership:
command: chown root:users /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh
亚马逊的支持团队解释说:这个配置创建了一个部署挂钩,它将把重写规则添加到/etc/nginx/conf.d/00_elastic_beanstalk_proxy中。形态。
(之前他们给我提供了将不同文件复制到/etc/nginx/conf.d的.config,但这些文件要么没有效果,要么更糟,出于某种原因,它们似乎覆盖了默认的nginx配置,或者优先于默认的nginx配置。)
如果要撤消此操作,即删除挂钩,则需要删除此ebextension并发出命令删除它创建的文件。您可以手动执行此操作,也可以通过临时放置的ebextensions命令执行此操作:
/opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh
/opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh
我还没有尝试过这种方法,但大概类似的方法可以删除它们并撤销此更改:
container_commands:
00_undochange:
command: rm /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh
01_undochange:
command: rm /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh
希望这能在将来帮助别人。
我发现javamail只支持袜子。有什么解决方案可以支持http代理吗?
环境Centos与apache 正在尝试设置从http到https的自动重定向 我试图添加以下内容到我的httpd.conf但它不工作 有什么想法吗?
问题内容: 我已经在托管jenkins和其他一些应用程序的ubuntu实例上将nginx设置为反向代理。我正在使用nginx根据相对路径路由到各种应用程序。从客户端到nginx的所有流量都通过https。在防火墙后面,nginx将所有内容通过http路由到配置的路径和端口号。看起来像这样: Nginx配置文件的相关部分是这样的: 问题是jenkins使用简单的身份验证,并且在成功登录后会发送302
有人知道在弹性豆茎中传递一个秘密值作为环境变量是可能的吗?另一个选择显然是在我们的代码库中使用sdk,但我想先探讨环境变量方法 干杯Damien
我将在AWS上构建微服务的体系结构,我想请你们澄清我的疑问。 我目前的一般概念 我想使用API网关,它公开在Elastic Beanstalk中运行的MicroDevices API。我想将Elastic Beanstalk放置在VPC中,而不直接从Internet访问其实例。 问题 弹性豆茎在应用程序创建时获得子域。这个子域应该由集成类型为AWS服务的API网关在操作配置中使用-我说得对吗? 什
我试图找出管理EB docker应用程序的HTTPS的最佳方式。 目前我正在使用下面的方法。 < li>ELB接受443上的HTTPS连接,并转发到实例上的HTTP端口80。 < li>ELB接受80上的HTTP连接,并转发到实例上的HTTP端口8080。 < li >实例接受端口80上的HTTP连接,并转发到docker app。 < li >实例接受端口8080上的HTTP连接,并将它们重定向