इलास्टिक बीनस्टॉक एक डॉक कंटेनर से कई बंदरगाहों का समर्थन नहीं करता है, इसलिए आपको सुझाव के अनुसार प्रॉक्सी स्तर पर इसे संभालने की आवश्यकता है। हालाँकि, आपके EC2 उदाहरण को आपके प्रमाणपत्र के बारे में जानने की आवश्यकता नहीं है, क्योंकि आप लोड बैलेंसर पर SSL कनेक्शन समाप्त कर सकते हैं।
आपकी .ebextensions
निर्देशिका में, nginx प्रॉक्सी के लिए एक कॉन्फ़िगरेशन बनाएं जिसमें दो सर्वर कॉन्फ़िगरेशन शामिल हैं; एक जो प्रॉक्सी http://docker
(डिफ़ॉल्ट कॉन्फ़िगरेशन, पोर्ट 80), और एक जिसे https (मैं 8080 पोर्ट चुना) को रीडायरेक्ट करता है।
.ebextensions/01-nginx-proxy.config
:
files:
"/etc/nginx/sites-available/000-default.conf":
mode: "000644"
owner: root
group: root
content: |
map $http_upgrade $connection_upgrade {
default "upgrade";
"" "";
}
server {
listen 80;
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
access_log /var/log/nginx/access.log;
location / {
proxy_pass http://docker;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 8080;
location / {
return 301 https://$host$request_uri;
}
}
commands:
00_enable_site:
command: 'rm -f /etc/nginx/sites-enabled/* && ln -s /etc/nginx/sites-available/000-default.conf /etc/nginx/sites-enabled/000-default.conf'
ईबी लोड-बैलेंसर और सुरक्षा समूहों के लिए एक दूसरा कॉन्फ़िगरेशन बनाएं जो उन्हें निम्नानुसार सेट करता है:
- EC2 उदाहरण :
- लोड बैलेंसर से पोर्ट्स 80/8080 पर यातायात की अनुमति दें
- पोर्ट 22 पर ट्रैफ़िक को कहीं से भी अनुमति दें (ssh एक्सेस के लिए, वैकल्पिक)
- लोड बैलेंसर :
- 80 HTTP को पोर्ट करने के लिए फॉरवर्ड पोर्ट 443 HTTPS
- आगे पोर्ट 80 HTTP 8080 HTTP पोर्ट करने के लिए
.ebextensions/02-load-balancer.config
:
"Resources" : {
"AWSEBSecurityGroup": {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Instance security group (22/80/8080 in)",
"SecurityGroupIngress" : [ {
"IpProtocol" : "tcp",
"FromPort" : "80",
"ToPort" : "80",
"SourceSecurityGroupId" : { "Ref" : "AWSEBLoadBalancerSecurityGroup" }
}, {
"IpProtocol" : "tcp",
"FromPort" : "8080",
"ToPort" : "8080",
"SourceSecurityGroupId" : { "Ref" : "AWSEBLoadBalancerSecurityGroup" }
}, {
"IpProtocol" : "tcp",
"FromPort" : "22",
"ToPort" : "22",
"CidrIp" : "0.0.0.0/0"
} ]
}
},
"AWSEBLoadBalancerSecurityGroup": {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Load balancer security group (80/443 in, 80/8080 out)",
"VpcId" : "<vpc_id>",
"SecurityGroupIngress" : [ {
"IpProtocol" : "tcp",
"FromPort" : "80",
"ToPort" : "80",
"CidrIp" : "0.0.0.0/0"
}, {
"IpProtocol" : "tcp",
"FromPort" : "443",
"ToPort" : "443",
"CidrIp" : "0.0.0.0/0"
} ],
"SecurityGroupEgress": [ {
"IpProtocol" : "tcp",
"FromPort" : "80",
"ToPort" : "80",
"CidrIp" : "0.0.0.0/0"
}, {
"IpProtocol" : "tcp",
"FromPort" : "8080",
"ToPort" : "8080",
"CidrIp" : "0.0.0.0/0"
} ]
}
},
"AWSEBLoadBalancer" : {
"Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
"Properties" : {
"Listeners" : [ {
"LoadBalancerPort" : "80",
"InstancePort" : "8080",
"Protocol" : "HTTP"
}, {
"LoadBalancerPort" : "443",
"InstancePort" : "80",
"Protocol" : "HTTPS",
"SSLCertificateId" : "arn:aws:iam::<certificate_id>:<certificate_path>"
} ]
}
}
}
(नोट: अपने मूल्यों के साथ SSLCertificateId और VpcId को बदलना न भूलें)।
लोड बैलेंसर (HTTP) के पोर्ट 80 पर कोई भी ट्रैफिक EC2 इंस्टेंस पर पोर्ट 8080 को हिट करेगा, जो HTTPS को रीडायरेक्ट करता है। लोड बैलेंसर (HTTPS) पर पोर्ट 443 पर ट्रैफिक EC2 उदाहरण पर पोर्ट 80 द्वारा परोसा जाएगा, जो कि डॉक प्रॉक्सी है।