ইলাস্টিক বিয়ানস্টালক একটি সিঙ্গল ডকার কনটেইনার থেকে একাধিক পোর্ট সমর্থন করে না, তাই আপনাকে পরামর্শ অনুযায়ী প্রক্সি স্তরে এটি পরিচালনা করতে হবে। তবে আপনার ইসি 2 উদাহরণটি আপনার শংসাপত্র সম্পর্কে জানার দরকার নেই, কারণ আপনি লোড ব্যালেন্সারে এসএসএল সংযোগটি শেষ করতে পারেন।
আপনার .ebextensionsডিরেক্টরিতে, এনগিনেক্স প্রক্সির জন্য একটি কনফিগারেশন তৈরি করুন যাতে দুটি সার্ভার কনফিগার থাকে; একটি প্রক্সি 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'
EB লোড-ব্যালেন্সার এবং সুরক্ষা গোষ্ঠীগুলির জন্য একটি দ্বিতীয় কনফিগারেশন তৈরি করুন যা সেগুলি নীচে সেট করে:
- ইসি 2 উদাহরণ :
- লোড ব্যালেন্সার থেকে 80/8080 বন্দরগুলিতে ট্র্যাফিকের অনুমতি দিন
- যে কোনও জায়গা থেকে 22 বন্দরে ট্র্যাফিকের অনুমতি দিন (এসএসএস অ্যাক্সেসের জন্য, alচ্ছিক)
- ভার ভারসাম্যকারী :
- 80 HTTP পোর্টে 443 HTTPS পোর্ট ফরওয়ার্ড করুন
- 8080 HTTP পোর্টে 80 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>"
} ]
}
}
}
(দ্রষ্টব্য: আপনার মানগুলির সাথে এসএসসি সার্টিফিকেটআইডি এবং ভিপিসিআইডি প্রতিস্থাপন করতে ভুলবেন না)।
ইসি 2 উদাহরণে লোড ব্যালেন্সার (এইচটিটিপি) 80 পোর্টের যে কোনও ট্র্যাফিক 8080 পোর্টে আঘাত করবে, যা এইচটিটিপিএসে পুনঃনির্দেশ করে। লোড ব্যালেন্সারে (এইচটিটিপিএস) 443 পোর্টে ট্রাফিক ইসি 2 উদাহরণে 80 পোর্ট দ্বারা পরিবেশন করা হবে যা ডকার প্রক্সি।