ইসি 2 ইলাস্টিক লোড ব্যালান্সার এইচটিটিপি থেকে এইচটিটিপিএসে পুনঃনির্দেশ করা হচ্ছে


104

আমি সমস্ত HTTP অনুরোধটি ELB- তে https অনুরোধে পুনর্নির্দেশ করতে চাই । আমার দুটি ইসি 2 উদাহরণ রয়েছে। আমি সার্ভারের জন্য এনগিনেক্স ব্যবহার করছি। আমি কোনও সাফল্য ছাড়াই এনজিনেক্স কনফ ফাইলগুলি পুনরায় লেখার চেষ্টা করেছি। আমি এটি সম্পর্কে কিছু পরামর্শ চাই।


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

উত্তর:


87

এডাব্লুএস অ্যাপ্লিকেশন লোড ব্যালান্সাররা এখন HTTPS পুনর্নির্দেশে নেটিভ HTTP সমর্থন করে।

কনসোলে এটি সক্ষম করতে, নিম্নলিখিতগুলি করুন:

  1. ইসি 2 এ আপনার লোড ব্যালেন্সারে যান এবং "শ্রোতা" ট্যাব করুন
  2. আপনার HTTP শ্রোতার উপর "দেখুন / সম্পাদনের নিয়ম" নির্বাচন করুন
  3. ডিফল্ট এক (নীচে) ব্যতীত সমস্ত নিয়ম মুছুন
  4. ডিফল্ট নিয়ম সম্পাদনা করুন: একটি ক্রিয়া হিসাবে "পুনর্নির্দেশ" চয়ন করুন, সমস্ত কিছু ডিফল্ট হিসাবে ছেড়ে যান এবং একটি বন্দর হিসাবে "443" প্রবেশ করুন।

স্থানীয় পুনর্নির্দেশ শ্রোতার নিয়ম

এখানে বর্ণিত হিসাবে সিএলআই ব্যবহার করে একই অর্জন করা যেতে পারে ।

ক্লাউডফর্মেশনে এটি করাও সম্ভব, যেখানে আপনার এটির মতো শ্রোতা অবজেক্ট সেট আপ করতে হবে:

  HttpListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      LoadBalancerArn: !Ref LoadBalancer
      Port: 80
      Protocol: HTTP
      DefaultActions:
      - Type: redirect 
        RedirectConfig:
          Protocol: HTTPS
          StatusCode: HTTP_301
          Port: 443

আপনি যদি এখনও ক্লাসিক লোড ব্যালান্সার ব্যবহার করেন তবে অন্যরা বর্ণিত এনজিআইএনএক্স কনফিগারেশনের সাথে যান।


1
এটি এখন সহজ জানতে খুব দরকারী। তবে এটি কেবল একটি লিঙ্কের পরিবর্তে কী কনফিগার করতে হবে সে সম্পর্কে আরও তথ্যের সাথে আরও ভাল উত্তর হবে।
জন রিস

1
@ জনআরিস সেই অনুসারে উত্তরটি সম্পাদনা করেছেন, আশা করি এটি সাহায্য করবে
উলি

খুশী হলাম। আমি আপনাকে শূন্যে পেতে উজ্জীবিত করেছি। তুমি আরো বেশির যোগ্য.
জন রিস

2
@ ফ্লোরিয়ান আপনি ক্লাসিক লোড ব্যালেন্সার ব্যবহার করছেন বলে মনে হয়। এই বিকল্পটি পেতে অ্যাপ্লিকেশন লোড ব্যালান্সারের স্যুইচ করুন
উলি

আমি আমার দৃষ্টিতে অ্যাপ্লিকেশন লোড ব্যালান্সারকে কীভাবে বরাদ্দ করব? (কোনও instancesট্যাব না থাকায় )
ফ্লোরিয়ান

107

ELB X-Forwarded-Protoশিরোনাম সেট করে , আপনি এটির জন্য মূল অনুরোধটি HTTP- র ছিল কিনা তা সনাক্ত করতে এবং এটির পরে HTTPS এ পুনর্নির্দেশ করতে পারেন।

আপনি নিজের serverকনফিডে এটি চেষ্টা করতে পারেন :

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

ELB ডক্সটি একবার দেখুন ।


3
এই কনফিগারেশনটি একজন কোথায় করে?
এরিকপটার্স0

2
@ এরিকপেটার0 উত্তর উত্তরে স্নিপেট nginxকনফিগারেশনের জন্য , তবে নীতিটি কোনও ওয়েব সার্ভারে প্রযোজ্য।
দিমিত্রি মুখিন

1
আপনি যদি যাত্রী-স্ট্যান্ডেলোন দিয়ে বিনস্টাল ব্যবহার করেন, তবে এনজিএক্স কনফিগারেশন পরিবর্তন করার পদ্ধতি সম্পর্কে এই লিঙ্কটি অনুসরণ করুন। কুইটা.com
টাক_নিশিদা /

3
আপনার লোড ব্যালেন্সারে আপনার HTTP এবং HTTPS শ্রোতা রয়েছে তা নিশ্চিত করুন।
গ্যাভিন পামার

1
@ রোনাল্ড, প্রতিক্রিয়াতে সার্ভারের দ্বারাই আমি EGB এর পিছনে দৌড়াতে থাকা ইপি 2 উদাহরণগুলিতে এনগিনেক্স সার্ভারকে বোঝাতে চাইছি।
দিমিত্রি মুখিন

34

আমার একই সমস্যা ছিল, আমার পরিস্থিতিতে এইচটিটিপিএস সম্পূর্ণরূপে ইএলবি দ্বারা পরিচালিত হয়েছিল এবং আমি আমার উত্স ডোমেন আগে জানতাম না তাই আমি এরকম কিছু করে শেষ করেছি:

server {
  listen 81;
  return 301 https://$host$request_uri;
}

server {
  listen 80;
  # regular server rules ...
}

এবং তারপরে অবশ্যই ELB 'https' কে ইন্সট্যান্ট পোর্ট 80 এর দিকে নির্দেশ করে এবং তারপরে উদাহরণ পোর্টে 'HTTP' রুট।


3
এটি প্রতিভা।
অ্যান্ডি হেইডেন

2
@ কোডি বুগস্টিন এটি এনগিনেক্স কনফিগারেশন, আপনার যদি একটি থাকে
টিমুরসো

@ টিউমারসো যদি আপনার কিছু থাকে?
কোডিবাগস্টাইন

@ কোডিবাগস্টিন যদি আপনার অ্যাপ্লিকেশনের সামনে এনগিনেক্স থাকে (আমি উদাহরণস্বরূপ না, এটি এক্সপ্রেসজেএস চালিত কোনও ধারককে সরাসরি চালিত করা হবে)
কোনও ধারকটিতে

এনগিনেক্স কোথায় যাবে? ইএলবির ভিতরে? ইসি 2 এর ভিতরে? এটি কি কোথাও ইলাস্টিক বিয়ানস্টালকে কনফিগার করা হয়েছে?
কোডিবাগস্টাইন

16

অ্যামাজন ইলাস্টিক লোড ব্যালেন্সার (ইএলবি) এক্স-ফরওয়ার্ড-প্রোটো নামে একটি এইচটিটিপি শিরোনাম সমর্থন করে। ELB- র মাধ্যমে যাওয়া সমস্ত এইচটিটিপিএস অনুরোধের এক্স-ফরওয়ার্ড-প্রোটোর মান "এইচটিপিএস" এর সমান হবে। এইচটিটিপি অনুরোধের জন্য, আপনি নিম্নলিখিত পুনর্লিখনের নিয়মটি অনুসরণ করে এইচটিটিপিএসকে জোর করতে পারেন। আমার জন্য এটি ভাল কাজ করে!

এ্যাপাচি

আপনি .htaccess ফাইলে নিম্নলিখিত লাইনগুলি যুক্ত করতে পারেন:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}

অথবা আপনি যদি একই ইসি 2 ওয়েব সার্ভারে একাধিক ডোমেন পরিচালনার জন্য vhost.conf ব্যবহার করেন তবে আপনি vhost.conf- এ নিম্নলিখিতটি যুক্ত করতে পারেন (এটির জন্য আপনি যে ডোমেনটি https ব্যবহার করতে চান তাতে এটি যুক্ত করতে পারেন):

<VirtualHost *:80>
...
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}
...
</VirtualHost>

আইআইএস

কনফিগারেশন জিইউআই ব্যবহার করে আইআইএস আরল-পুনর্লিখন মডিউলটি ইনস্টল করুন এই সেটিংসটি যুক্ত করুন:

<rewrite xdt:Transform="Insert">
<rules>
<rule name="HTTPS rewrite behind ELB rule" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions>
<add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" ignoreCase="false" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{SERVER_NAME}{URL}" />
</rule>
</rules>
</rewrite>

আরও পড়ুন এখানে


আমাদের দৃষ্টান্তটি সাধারণ HTTP ট্র্যাফিক পুনঃনির্দেশ করার বিষয়টি ছিল কারণ শিরোনামটি উপস্থিত ছিল না। আমি শর্তটি তৈরি করে এটি সমাধান করি:RewriteCond %{HTTP:X-Forwarded-Proto} !(https|^$)
নট্রোনাইট

এটি অসীম পুনঃনির্দেশের কারণ করছে। আমি উইন্ডোজ সার্ভারের সাথে আইআইএস ব্যবহার করছি।
এটি একটি ফাঁদ

@ ইট্যাট্রাপ: আইআইএসের জন্য যদি এটি কাজ না করে তবে এই ইউআরএলটিতে স্ক্রিপ্টটি ব্যবহার করে দেখুন: স্টেফেন.জেনোপ্রিম.কম
ইমান

5

উপরের htaccess সমাধানগুলির ফলে ELB স্বাস্থ্য পরীক্ষা ব্যর্থ হয়েছে। অনলাইনে একটি নিবন্ধ আবিষ্কার না করা পর্যন্ত আমার সমাধান পেতে আমার কিছুটা সমস্যা হয়েছিল যার মধ্যে কারও আমার একই সমস্যা ছিল। তার সমাধানটি htaccess ফাইলের পরিবর্তে এটির পরিবর্তে যুক্ত করা ছিল:

RewriteEngine on 
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

ELB এর মাধ্যমে এইচটিটিপিএস-এর মাধ্যমে বাহ্যিক অনুরোধগুলি পুনর্নির্দেশের সময় HTTP- র মাধ্যমে এই এবং অন্যান্য স্থানীয় অনুরোধগুলিকে মঞ্জুরি দেওয়ার জন্য, https- তে নেতিবাচক ম্যাচের পরিবর্তে HTTP- তে মেলানোর জন্য পুনর্লিখনের শর্তটি সামঞ্জস্য করুন।

উত্স: এইডাব্লুএস এবং ইএলবি দিয়ে এইচটিটিপিএসকে এইচটিটিপিএসে পুনঃনির্দেশ করা হচ্ছে


"https এ নেগেটিভ ম্যাচের পরিবর্তে HTTP- র সাথে মেলানোর জন্য পুনরায় লেখার শর্তটি সামঞ্জস্য করুন" এটিই আমি সেই অংশটি ঠিক করার চেষ্টা করছিলাম। ধন্যবাদ!
মেরিক্যাট

4

আপনি যে সমাধানটি সন্ধান করতে পারেন এটি এটি নাও হতে পারে তবে ELB এর পাশাপাশি AWS ক্লাউডফ্রন্ট ব্যবহার করা অন্য বিকল্প হতে পারে। ক্লাউডফ্রন্ট সমস্ত আগত এইচটিটিপি ট্র্যাফিক এইচটিটিপিএসে পুনঃনির্দেশ করার বিকল্প দেয়।



3

Nginx এবং ELB কনফিগারেশন নিয়ে আমার অদ্ভুত সমস্যা ছিল। আমার সেটআপটিতে ELB এর পিছনে একটি nginx এর ভিতরে 3 টি পৃথক পরিষেবা অন্তর্ভুক্ত রয়েছে। এবং আমার মধ্যে মিশ্র বিষয়বস্তু ছিল: যখন আপনার ELB- র অনুরোধটি https, তবে কেবলমাত্র ELB HTTP- র মধ্যে থাকে এবং সার্ভারটি HTTP ব্যবহার করে স্থিতির জন্য আপেক্ষিক পথ তৈরি করে, তাই ব্রাউজারটি 'মিশ্র সামগ্রী' ইস্যুতে ব্যর্থ হয়। এবং আমাকে অবশ্যই কোনও পুনঃনির্দেশনা ছাড়াই http / https উভয় কাজের জন্য সমাধান তৈরি করতে হবে।

এখানে কনফিগারেশন nginx/conf.d/ফোল্ডারে অবস্থিত :

# Required for http/https switching
map $http_x_forwarded_port $switch {
  default   off;
  "80"    off;
  "443"   on;
}

এর অর্থ হ'ল আসল ক্লায়েন্ট প্রোটোকলটি কী তা আমাদের জানা থাকবে। আপনি দেখতে পাচ্ছেন, আমাদের এটি $switchভারে থাকবে। এবং এই মুহুর্তে আপনি এটি যেখানে প্রয়োজন তার সমস্ত স্থানে এটি ব্যবহার করুন:

location ~ /softwareapi/index.php {
  fastcgi_param HTTPS $switch;
  .. other settings here ..
}

এইচটিটিপিএস সেটিংয়ের সাথে পিএইচপি অ্যাপ্লিকেশন স্বয়ংক্রিয়ভাবে ডান প্রোটোকল সনাক্ত করবে এবং সাবধানে মিশ্রিত সামগ্রীর সমস্যা প্রতিরোধের জন্য আপেক্ষিক পথ তৈরি করবে।

শুভেচ্ছান্তে.


3

@ উলির উত্তরের ভিত্তিতে যদি আপনি এটি টেরফর্ম ব্যবহার করে কনফিগার করতে চান তবে এখানে একটি উদাহরণ>>

resource "aws_alb_listener" "web" {
  load_balancer_arn = "${aws_alb.web.arn}"

  port              = "80"
  protocol          = "HTTP"

  default_action {
    type = "redirect"

    redirect {
      port        = "443"
      protocol    = "HTTPS"
      status_code = "HTTP_301"
    }
  }
}

উৎস


-2

.ebextensions/00_forward_http_to_https.configনিম্নলিখিত বিষয়বস্তু সহ একটি ফাইল তৈরি করুন :

files: 
  /tmp/deployment/http_redirect.sh:
    mode: "000755"
    content: |
      APP_URL=`/opt/elasticbeanstalk/bin/get-config environment --output yaml | grep -oP 'APP_URL: \K([^\s)\"](?!ttp:))+'`
      sed -ie 's@$proxy_add_x_forwarded_for;@$proxy_add_x_forwarded_for;\n        if ($http_x_forwarded_proto = 'http') { return 301 https://'"$APP_URL"'$request_uri; }@' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf

container_commands:
  http_redirect:
    command: "/tmp/deployment/http_redirect.sh"

আগেই AWS পরিচালন কনসোল থেকে APP_URL পরিবেশের পরিবর্তনশীল সেট করা নিশ্চিত করুন।


ELB এর সাথে টিসিপি সংযোগগুলিতে ভারসাম্য বজায় রেখে আমি কীভাবে এটি করতে পারি?
বুম দিন

1
আমি দেখতে পাচ্ছি না কোথায় আপনার উত্তর প্রশ্নের সাথে খাপ খায় ... আপনি ইলাস্টিক শিমের ডাঁটা সম্পর্কে কথা বলছেন এবং প্রশ্নটি ইসি 2 এর ভিতরে এনজিনেক্স সম্পর্কে।
jvarandas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.