ইলাস্টিক বিয়ানস্টালক ফোর্স https


12

আমি এমন কোনও সাইটটির সাথে এইচটিটিপিএসকে বাধ্য করার সমস্যা করছি যা আমি এডাব্লুএস ইলাস্টিক বিয়ানস্টালকের মাধ্যমে নিযুক্ত করছি।

এটি এমবারজেএস ব্যবহার করে একটি ফ্রন্টএন্ড অ্যাপ্লিকেশন। HTTP ট্র্যাফিককে কীভাবে https এ ডাইরেক্ট করতে হবে তা বোঝার চেষ্টা করার জন্য আমি বহু দিন ধরে চেনাশোনাগুলিতে ঘুরছি। আমি আমার ইসি 2 মেশিনে আমাজন লিনাক্স এএমআই ব্যবহার করছি।

আমি এই সিদ্ধান্তে পৌঁছেছি (এটি ঠিক আছে কিনা তা এখনও নিশ্চিত নয়) যে এইচটিটিপিএসকে জোর করে এমন ইলাস্টিক বিয়ানস্টালকের মধ্যে নয়। আমি আমার ইলাস্টিক বিয়ানস্টালক লোড ব্যালেন্সারের মাধ্যমে এইচটিটিপি এবং এইচটিটিপিএস উভয়কেই অনুমতি দিচ্ছি এবং সার্ভারে পুনঃনির্দেশের চেষ্টা করছি।

এখানেই আমি সমস্যায় পড়ছি। আমি পুনর্লিখনের নিয়মগুলি সম্পর্কে অনেকগুলি উত্তর খুঁজে পাচ্ছি mod_rewriteযা ছাড়া শিরোনামের চারপাশে ভিত্তি করে তৈরি করা হয় তবে X-Forwarded-Protoসন্ধানের অনুসন্ধান অনুসারে ফাইলটি আমার ইসি 2 মেশিনে বিদ্যমান নেই।

আমি .ebextensionsডিরেক্টরিতে একটি কনফিগার ফাইল তৈরি করার চেষ্টা করেছি, তবে এটিও কার্যকর হয়নি।

আমি যে প্রধান জিনিসটি করার চেষ্টা করছি তা হ'ল ব্যবহারকারীরা যখন https তে হিট করার চেষ্টা করবেন তখন তা হ'ল HTTP to কোন পয়েন্টার বা পরামর্শ অনেক প্রশংসা করা হয়, ধন্যবাদ!

সম্পাদনা: আমি পাইথন ৩.৪ চলমান bit৪ বিট ডেবিয়ান জেসি ভি ১.৪.১ ব্যবহার করছি (পূর্বনির্ধারিত - ডকার)


দেখে মনে হচ্ছে ইন্টারনেট এই সমস্যার একক, সম্পূর্ণ এবং কার্যক্ষম সমাধানের সাথে একমত হতে পারে না। আশা করি আপনি আমার পোস্টে এখানে কিছু সহায়তা পেতে পারেন । এটির সাথে আসতে শেষ পর্যন্ত আমাকে হুপসের মধ্য দিয়ে ঝাঁপিয়ে পড়তে হয়েছিল।
ADTC

উত্তর:


7

আমি মনে করি আপনি যে ইলাস্টিক বিয়ানস্টালক পরিবেশটি ব্যবহার করেন তা নির্দিষ্ট করতে হবে (দেখুন: সমর্থিত প্ল্যাটফর্মগুলি ), কারণ বিভিন্ন পরিবেশের আলাদা কনফিগারেশন রয়েছে।

মূলত, আপনাকে কাস্টমাইজ করতে হবে:

  • ইলাস্টিক লোড ব্যালেন্সার :
    • 80 পোর্টে শুনুন এবং এটি EC2 পোর্ট 80 তে প্রক্সি করুন।
    • পোর্ট 443 শুনুন এবং এটি EC2 পোর্ট 443 এ প্রক্সি করুন।
  • ইসি 2 ওয়েব সার্ভার / প্রক্সি :
    • 80 পোর্ট শুনতে এবং HTTPS এ পুনঃনির্দেশ সঙ্গে সাড়া।
    • 443 পোর্টে শুনুন এবং অনুরোধটি পরিবেশন করুন।

এটি কাস্টমাইজ করতে, আপনি সি এল এল বা ব্যবহার করতে পারেন .ebextensions

আপনি এইডাব্লুএস ইলাস্টিক বিয়ানস্টালকে HTTPS সক্ষম এবং HTTP- পুনর্নির্দেশ সক্ষম করতে পারেন । এটি আপনাকে জানায় যে কীভাবে ইলাস্টিক বিয়ানস্টালক সিঙ্গল ডকার কনটেইনারটি এইচটিটিপিএস এবং এইচটিটিপি (HTTPS এ পুনঃনির্দেশ) কনফিগার করা যায়। আপনি আপনার প্রয়োজন হিসাবে কনফিগারেশন সামঞ্জস্য করতে পারেন।


আরে, দুর্দান্ত নিবন্ধ, আমি এটি চেষ্টা করে চলেছি।
অগ্নাবর্তক

সেই ফাইলের মধ্যে শংসাপত্রগুলি কীভাবে অন্তর্ভুক্ত করা যায় না সে সম্পর্কে কোনও ধারণা, বরং এটি উত্স নিয়ন্ত্রণে রাখবে না? আমরা যে শংসাপত্রগুলি লোড করেছি সেগুলি কি কোথাও পাওয়া যায়? আমি তাদের ফাইল সিস্টেমে খুঁজে পাচ্ছি না
অগ্নাবর্তক

আপনি আপনার এসএসএল শংসাপত্রের ফাইলটি এস 3 এ রাখতে পারেন। ইলাস্টিক Beanstalk ডাউনলোড বেসরকারী এস 3 বস্তুর অনুমতি দিতে, আপনি পড়তে পারেন এই
এডওয়ার্ড স্যামুয়েল

ELB SSL শংসাপত্রের জন্য, আপনি AWS ডকুমেন্টেশন অনুসরণ করতে পারেন: ইলাস্টিক লোড ব্যালেন্সিংয়ের জন্য এসএসএল শংসাপত্র । তারপরে আপনি arn:aws:iam::123456789012:server-certificate/YourSSLCertificateফর্ম্যাটে এসএসএল শংসাপত্রের সংস্থান পেতে পারেন ।
এডওয়ার্ড স্যামুয়েল

আমার কাছে এসএসএল শংসাপত্র সেট আপ আছে এবং আমার কাছে আরন রয়েছে যা 00-লোড-ব্যালেন্সারে যাবে (আমি আসলে ইউআইয়ের মাধ্যমে লোড ব্যালেন্সার কনফিগারেশন করছি), তবে সার্ভারে স্থাপনের জন্য জায়গাটি পাওয়া যাবে বলে মনে হচ্ছে না সেটিংস ssl_certificate /opt/ssl/default-ssl.crt;যখন আমি
শংসাপত্রের

10

X-Forwarded-Protoইএলবি দ্বারা সেট করা শিরোলেখ ব্যবহার করে লোড ব্যালান্সারের স্পর্শ না করে কিছুটা বেশি সহজেই এটি করা সম্ভব । এখানে আমি শেষ করে যাচ্ছি:

files:
  "/etc/nginx/sites-available/elasticbeanstalk-nginx-docker-proxy.conf":
    mode: "00644"
    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;
        }

        if ($http_x_forwarded_proto = 'http') {
          return 301 https://$host$request_uri;
        }
      }

এখনও পর্যন্ত সবচেয়ে সহজ সমাধান। আপনাকে যথেষ্ট ধন্যবাদ দিতে পারি না!
ক্রিস মার্টিন 19

হ্যাঁ, বেশিরভাগ পরিস্থিতিতে এটি সঠিক উপায় the
jlegler

3

ইলাস্টিক বিয়ানস্টালক একটি সিঙ্গল ডকার কনটেইনার থেকে একাধিক পোর্ট সমর্থন করে না, তাই আপনাকে পরামর্শ অনুযায়ী প্রক্সি স্তরে এটি পরিচালনা করতে হবে। তবে আপনার ইসি 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 পোর্ট দ্বারা পরিবেশন করা হবে যা ডকার প্রক্সি।


0

আইলাম টেরারফর্মটি ব্যবহার করে এইচটিটিপি থেকে এইচটিটিপিএসে এলটিস্টিক বিয়ানস্টালকে পুনর্নির্দেশ করতে সক্ষম করে,

আমি মাত্র অতিরিক্ত শ্রোতার বিধি যুক্ত করেছি

data "aws_alb_listener" "http" { //Get ARN of Listener on Port-80
  load_balancer_arn = aws_elastic_beanstalk_environment.myapp.load_balancers[0]
  port              = 80
}


resource "aws_alb_listener_rule" "redirect_http_to_https" {
  listener_arn = data.aws_alb_listener.http.arn
  action {
    type = "redirect"
    redirect {
      port        = "443"
      protocol    = "HTTPS"
      status_code = "HTTP_301"
    }
  }
  condition {
    host_header {
      values = ["*.*"]
    }
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.