如何配置.ebextensions以便EB负载均衡器终止https,然后将未加密的请求转发到我的EC2实例。 EC2实例读取请求。
我的负载均衡器接受2个端口的请求。 80和443. 443有一个上传的证书,我购买了#34; AWS Route 53"并通过了“AWS证书管理器”#34; (需要打开443端口)。
(上面隐藏了*** ssl证书)
此外,我的安全组允许https超过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
只是超时。
我是开发人员,但我对sysops几乎一无所知。
我一直试图调试这一天超过一天,所以任何帮助都会非常感激。
更新
根据Configure apache to listen on port other than 80,我尝试更改:
Listen 80
至Listen 443
中的/etc/httpd/conf/httpd.conf
{li> <VirtualHost *:80>
至<VirtualHost *:443>
中的/etc/httpd/conf.d/wsgi.conf
sudo /sbin/service httpd restart
答案 0 :(得分:1)
答案 1 :(得分:0)
我建议只设置Apache监听端口80并更改负载均衡器,将InstancePort设置为80,两个传入端口均为80&amp; 443。
LB终止SSL的一个好处是您不必担心处理上游服务器上的多个端口。
您可以使用X-Forwarded-Proto标头(负载均衡器提供)以确定请求最初是通过HTTP还是HTTPS进行的,这样您就可以相应地构建链接/网址等。
修改强>
基于该标题处理URL创建的另一种方法是强制使用https流量,你可以使用下面的内容,虽然我是一个nginx用户而不是Apache,所以你的里程可能会有所不同,因为下面的配置可能是完全是垃圾。
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
…
</VirtualHost>
答案 2 :(得分:0)