অ্যামাজন ELB এর পিছনে সমস্ত HTTP অনুরোধ যদি ব্যবহার না করে https এ পুনর্নির্দেশ করুন


27

বর্তমানে আমার কাছে একটি এলএলবি রয়েছে http://www.example.org এবং https://www.example.org উভয়ই ।

আমি এটি সেট আপ করতে চাই তাই http ://www.example.org- এ নির্দেশ করে যে কোনও অনুরোধ https://www.example.org এ পুনঃনির্দেশিত ।

ELB https অনুরোধগুলি HTTP অনুরোধ হিসাবে প্রেরণ করে, তাই ব্যবহার করে:

server {
      listen         80;
       server_name    www.example.org;
       rewrite        ^ https://$server_name$request_uri? permanent;
}

কাজ করবে না কারণ https://www.example.org এ করা অনুরোধগুলি এখনও nginx তে 80 পোর্টে করা হবে।

আমি জানি এটি আবার লিখতে পারা সম্ভব

server {
      listen         80;
      server_name    www.example.org;
      if ($http_x_forwarded_proto != "https") {
          rewrite ^(.*)$ https://$server_name$1 permanent;
      }
}

তবে আমি যা কিছু পড়েছি তা বলেছিল যে ifএনজিএনএক্স কনফিগারেশনের মধ্যে সব ক্ষেত্রে এড়ানো উচিত এবং এটি প্রতিটি অনুরোধের জন্যই হবে। এছাড়াও, এর অর্থ হ'ল আমাকে স্বাস্থ্য চেকের জন্য একটি বিশেষ পৃথক কনফিগারেশন স্থাপন করতে হবে ( যেমন এখানে বর্ণিত হয়েছে : "... আপনি যখন কোনও এলএলবি এর পিছনে থাকেন, যেখানে ইএলবি এইচটিটিপিএস শেষ পয়েন্ট হিসাবে কাজ করে এবং কেবল আপনার সার্ভারে এইচটিটিপি ট্রাফিক প্রেরণ করে, আপনি ELB- এর যে স্বাস্থ্য পরীক্ষা করা দরকার তা পরীক্ষা করার জন্য একটি HTTP 200 ঠিক আছে প্রতিক্রিয়া দিয়ে সাড়া দেওয়ার ক্ষমতাটি ভেঙে দিন।

আমি এনজিএনএক্স কনফিগারেশনের পরিবর্তে ওয়েব অ্যাপ্লিকেশনটির কোডটিতে লগইনটি রাখার বিষয়টি বিবেচনা করছি (এবং এই প্রশ্নের প্রয়োজনে ধরে নেওয়া যাক এটি একটি জ্যাঙ্গো ভিত্তিক অ্যাপ্লিকেশন) তবে এর চেয়ে বেশি ওভারহেড হবে কিনা তা আমি নিশ্চিত নই I'm if মধ্যে কনফিগারেশন।


হাই আপনি কি দয়া করে আমাকে বলতে পারেন আপনি এই কোডগুলি কোথায় রেখেছেন?
ইউউন শাওলিন ম্যাকুলেল লাই

@ ইউনশোলিনম্যাকুলেল্লাই শিওর এগুলি এনজিঙ্ক্সের জন্য কনফিগারেশন ফাইল, সুতরাং আমি কেবল একটি ফাইল / কোড / জঙ্গিঞ্জ / কনফ.ডে / তে ফাইলটি রেখেছি। আমি সাধারণত ফাইল ডোমেননাম.কনফের নাম রাখি যেখানে "ডোমেইননাম" প্রশ্নযুক্ত ওয়েবসাইটের ডোমেন। .Conf দিয়ে শেষ হওয়ার সাথে সাথে আপনি যতক্ষণ চান ফাইলটির নাম দিতে পারেন।
জর্ডান রিটার

আপনাকে অনেক ধন্যবাদ. আমি .conf অনুসরণ করে একটি নতুন ফাইল তৈরি করার চেষ্টা করেছি। তবে এটি আমার পক্ষে কার্যকর হয়নি। তারপরে আমি ফাইলটিতে কোডটি রেখেছিলাম যা / ডেস্কটপ / জিনেক্স / কনফ.ড / এডাব্লুএস থেকে উত্পন্ন হয়েছিল। এটা এখন কাজ করে.
ইউন শাওলিন মাকুলেলি লাই

উত্তর:


9

যদি এটি ঠিক মতো কাজ করে তবে এ থেকে ভয় পাবেন না। http://wiki.nginx.org/IfIsEvil

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


এই পৃষ্ঠাটিতে আরও বলা হয়েছে যে "অবস্থানের প্রসঙ্গে ব্যবহৃত হলে সমস্যা থাকলে"। আমার কাছে মনে হয় location {}এর server {}পরিবর্তে আপনার বাইরে যা করার দরকার তা আপনি করতে পারেন । (তবে দয়া করে দয়া করে এটি আমাকে
জানাবেন

15
  1. আপনার AWS ELB ম্যাপিং ELB: 80 উদাহরণস্বরূপ সেট করুন: 80 এবং ELB: 443 উদাহরণস্বরূপ: 1443।
  2. 80 এবং 1443 পোর্টে শুনতে এনজিন্সকে বেঁধে রাখুন।
  3. ফরোয়ার্ড অনুরোধগুলি পোর্ট 80 এ বন্দরে 443 এ পৌঁছাচ্ছে।
  4. স্বাস্থ্য পরীক্ষাটি HTTP: 1443 হওয়া উচিত। এটি HTTP প্রত্যাখ্যান করে: 80 কারণ 301 পুনর্নির্দেশ।

aws এলব সেটআপ

এনজিআইএনএক্স সেটআপ

    server {
       listen         80;
       server_name    www.example.org;
       rewrite        ^ https://$server_name$request_uri? permanent;
    }

    server {
       listen         1443;
       server_name    www.example.org;
   } 

স্বাস্থ্য পরীক্ষা সেটিংস সম্পর্কে কি? আপনি কি দয়া করে সে সম্পর্কে বিস্তারিত বলতে পারেন?
samkhan13

এটি http: 80 এ হেল্থ চেক সেটটি দিয়ে কাজ করে নি, স্বাস্থ্য পরীক্ষা ব্যর্থ হয়েছে।
samkhan13

2
স্বাস্থ্য পরীক্ষা করা উচিত HTTP:1443। এটি প্রত্যাখ্যান HTTP:80কারণ 301 পুনর্নির্দেশ।
cbron

এটি বেশিরভাগই আমার পক্ষে কাজ করেছে তবে আমার কাছে ওয়াইল্ডকার্ড ডোমেনটির সাথে পুনরায় লেখার লাইনটি কাজ করে না। এই অন্যান্য পোস্টটি সেই অংশটি ঠিক করেছে: serverfault.com/questions/447258/…
রন

9

এই সমাধানটি শর্তযুক্ত যুক্তি ব্যবহার করে, তবে যেমন গৃহীত উত্তর থেকে বোঝা যায়, আমিও মনে করি এটি ঠিক আছে। রেফ: https://stackoverflow.com/questions/4833238/nginx-conf-redirect-m Multiple-conditions

এছাড়াও, এটির জন্য চিত্রটির জন্য সুরক্ষা সেটিংসে কোনও অতিরিক্ত পোর্ট খোলার দরকার নেই। আপনি এডাব্লুএস এলবিতে এসএসএল বন্ধ করতে পারেন, এবং আপনার উদাহরণে https ট্র্যাফিকটিকে HTTP পোর্ট 80 এ যেতে পারেন।

উদাহরণস্বরূপ, অ্যাপ্লিকেশন সার্ভারের দিকে যাত্রা করে 80 বন্দরটিতে এলবি স্বাস্থ্য চেক হিট করে / স্বাস্থ্য, সুতরাং স্বাস্থ্য চেকটি এনজিনেক্স এবং আপনার অ্যাপ্লিকেশন উভয়কে শ্বাসপ্রশ্বাসিত করে যাচাই করে।

server {
  listen 80 default deferred;

  set $redirect_to_https 0;
  if ($http_x_forwarded_proto != 'https') {
    set $redirect_to_https 1;
  }
  if ($request_uri = '/health') {
    set $redirect_to_https 0;
  }
  if ($redirect_to_https = 1) {
    rewrite ^ https://www.example.com$request_uri? permanent;
  }
  ...
}

1
এটি করার আরও একটি মার্জিত উপায় থাকতে হবে
এডওয়ার্ড

0

আপনি এখন এডাব্লুএস লোড ব্যালেন্সার সেটিংসে একটি নতুন শ্রোতা তৈরি করতে পারেন যা এইচটিটিপি পোর্ট 80 কে এইচটিটিপিএস পোর্ট 443 এ পুনঃনির্দেশ করে So


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