Python 允许EC2侦听端口443以获取来自负载平衡器的未加密请求
如何配置.ebextensions,以便EB负载平衡器终止https,然后将未加密的请求转发给我的EC2实例。EC2实例读取请求 我的负载平衡器在两个端口上接受请求。80和443。443有一个上传的证书,我用“AWS Route 53”购买了该证书,并用“AWS certificate Manager”申请了一个证书(需要打开端口443) (***ssl证书隐藏在上面) 我的安全组还允许https通过443 问题是我不知道如何编写Python 允许EC2侦听端口443以获取来自负载平衡器的未加密请求,python,ssl,flask,amazon-elastic-beanstalk,wsgi,Python,Ssl,Flask,Amazon Elastic Beanstalk,Wsgi,如何配置.ebextensions,以便EB负载平衡器终止https,然后将未加密的请求转发给我的EC2实例。EC2实例读取请求 我的负载平衡器在两个端口上接受请求。80和443。443有一个上传的证书,我用“AWS Route 53”购买了该证书,并用“AWS certificate Manager”申请了一个证书(需要打开端口443) (***ssl证书隐藏在上面) 我的安全组还允许https通过443 问题是我不知道如何编写.ebextensions/…config,以允许接受来自负载平
.ebextensions/…config
,以允许接受来自负载平衡器的超过443的未加密请求
我找到了这个(亚马逊文档):
和(堆栈溢出):
但我认为这两个例子都说明了负载平衡器只是在转发加密的请求
我在下面尝试过,但没有成功:
#https.config
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupName: {Ref : AWSEBSecurityGroup}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
我希望负载平衡器进行解密,然后将未加密的请求转发到我的应用程序使用的端口
在我的应用程序中:
# wsgi.py
from app import application
if __name__ == "__main__":
application.run(host='0.0.0.0', port=443)
目前http
运行良好且快速,但https
只是超时
我是一名开发人员,但我对系统操作几乎一无所知
我已经试着调试这一天多了,所以任何帮助都将非常感谢
更新:
# wsgi.py
from app import application
if __name__ == "__main__":
application.run(host='0.0.0.0', port=443)
基于此,我尝试改变:
在
/etc/httpd/conf/httpd.conf
至/etc/httpd/conf.d/wsgi.conf
- 然后运行
sudo/sbin/service httpd restart
您确实应该考虑不使用内置flask Web服务器,因为它只用于开发。尝试uwsgi或gunicorn我建议只将Apache设置为侦听端口80,并将负载平衡器更改为将80和443两个传入端口的InstancePort设置为80 在LB终止SSL的好处之一是,您不必担心在上游服务器上处理多个端口 您可以使用X-Forwarded-Proto报头(负载平衡器提供的)来确定请求最初是通过HTTP还是HTTPS发送的,这样您就可以相应地构建链接/URL等 编辑 处理基于该头的URL创建的另一种方法是强制https流量,您可以使用下面的方法,尽管我是nginx用户而不是Apache用户,因此您的里程可能会有所不同,因为下面的配置可能完全是垃圾
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
…
</VirtualHost>
重新启动发动机
重写cond%{HTTP:X-Forwarded-Proto}^HTTP$
重写规则。*https://%{HTTP_HOST}%{REQUEST_URI}[R=301,L]
…
我能够通过将两个端口作为http从负载平衡器转发到我的EC2实例来解决这个问题
注意实例端口为80
,实例协议为HTTP
之前,我无法为第二个协议指定80
,因为我将协议保留为HTTPS