允许 EC2 侦听端口 443 以获取来自负载均衡器的未加密请求
Allow EC2 to listen to port 443 for unencrypted request from load balancer
如何配置 .ebextensions 以便 EB 负载平衡器终止 https,然后将未加密的请求转发到我的 EC2 实例。 EC2 实例读取请求。
我的负载均衡器接受 2 个端口上的请求。 80 和 443。443 有一个上传的证书,我用 "AWS Route 53" 购买并用 "AWS Certificate Manager" 请求证书(需要打开端口 443)。
(*** ssl 证书隐藏在上面)
我的安全组也允许 https over 443。
问题是我不知道如何编写 .ebextensions/...config
以允许接受从负载均衡器传递的超过 443 的未加密请求。
我找到了这个(亚马逊文档):
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-singleinstance-python.html
和(堆栈溢出):
Flask on Elastic Beanstalk with SSL gives 403 Forbidden
但我认为这些都是负载均衡器仅转发加密请求时的示例。
我试过以下但没有成功:
#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
只是超时。
我是一名开发人员,但我对系统操作员几乎一无所知。
我已经尝试调试它一天多了,非常感谢任何帮助。
更新:
基于 Configure apache to listen on port other than 80 ,我尝试更改:
Listen 80
到 Listen 443
在 /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
到 <VirtualHost *:443>
在 /etc/httpd/conf.d/wsgi.conf
- 然后 运行
sudo /sbin/service httpd restart
检查这个。
你真的应该考虑不要使用内置的 flask 网络服务器,因为它仅用于开发。试试 uwsgi 或 gunicorn
我的建议是仅将 Apache 设置为侦听端口 80 并更改负载均衡器以将 InstancePort 设置为 80 以用于 80 和 443 的两个传入端口。
在 LB 终止 SSL 的好处之一是您不必担心处理上游服务器上的多个端口。
您可以使用 X-Forwarded-Proto header(负载均衡器提供)来确定请求最初是通过 HTTP 还是 HTTPS 传入的,这样您就可以构建您的 links/urls等等。
编辑
基于 header 处理 URL 创建的另一种方法是强制 https 流量,您可以使用类似下面的方法来执行此操作,尽管我是 nginx 用户而不是 Apache,所以您的里程可能会有所不同,因为下面的配置可能完全是垃圾。
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
…
</VirtualHost>
我能够通过将两个端口作为 http 从负载均衡器转发到我的 EC2 实例来解决。
注意实例端口是 80
,实例协议都是 HTTP
。
之前我无法为第二个指定 80
,因为我将协议保留为 HTTPS
。
如何配置 .ebextensions 以便 EB 负载平衡器终止 https,然后将未加密的请求转发到我的 EC2 实例。 EC2 实例读取请求。
我的负载均衡器接受 2 个端口上的请求。 80 和 443。443 有一个上传的证书,我用 "AWS Route 53" 购买并用 "AWS Certificate Manager" 请求证书(需要打开端口 443)。
(*** ssl 证书隐藏在上面)
我的安全组也允许 https over 443。
问题是我不知道如何编写 .ebextensions/...config
以允许接受从负载均衡器传递的超过 443 的未加密请求。
我找到了这个(亚马逊文档): https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-singleinstance-python.html 和(堆栈溢出): Flask on Elastic Beanstalk with SSL gives 403 Forbidden
但我认为这些都是负载均衡器仅转发加密请求时的示例。
我试过以下但没有成功:
#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
只是超时。
我是一名开发人员,但我对系统操作员几乎一无所知。
我已经尝试调试它一天多了,非常感谢任何帮助。
更新:
基于 Configure apache to listen on port other than 80 ,我尝试更改:
Listen 80
到Listen 443
在/etc/httpd/conf/httpd.conf
<VirtualHost *:80>
到<VirtualHost *:443>
在/etc/httpd/conf.d/wsgi.conf
- 然后 运行
sudo /sbin/service httpd restart
检查这个。
你真的应该考虑不要使用内置的 flask 网络服务器,因为它仅用于开发。试试 uwsgi 或 gunicorn
我的建议是仅将 Apache 设置为侦听端口 80 并更改负载均衡器以将 InstancePort 设置为 80 以用于 80 和 443 的两个传入端口。
在 LB 终止 SSL 的好处之一是您不必担心处理上游服务器上的多个端口。
您可以使用 X-Forwarded-Proto header(负载均衡器提供)来确定请求最初是通过 HTTP 还是 HTTPS 传入的,这样您就可以构建您的 links/urls等等。
编辑
基于 header 处理 URL 创建的另一种方法是强制 https 流量,您可以使用类似下面的方法来执行此操作,尽管我是 nginx 用户而不是 Apache,所以您的里程可能会有所不同,因为下面的配置可能完全是垃圾。
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
…
</VirtualHost>
我能够通过将两个端口作为 http 从负载均衡器转发到我的 EC2 实例来解决。
注意实例端口是 80
,实例协议都是 HTTP
。
之前我无法为第二个指定 80
,因为我将协议保留为 HTTPS
。