বিপরীত প্রক্সি হিসাবে ব্যবহার করার সময় https থেকে http এ ট্র্যাফিক পুনঃনির্দেশকরণ থেকে এনজিন্সকে আটকাবেন


16

এখানে আমার সংক্ষিপ্ত nginx ভোস্ট কনফ:

upstream gunicorn {
    server 127.0.0.1:8080 fail_timeout=0;
}

server {
    listen 80;
    listen 443 ssl;
    server_name domain.com ~^.+\.domain\.com$;

    location / {
        try_files $uri @proxy;
    }

    location @proxy {
        proxy_pass_header Server;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 120;
        proxy_pass http://gunicorn;
    }
}

একই সার্ভারটি এইচটিটিপি এবং এইচটিটিপিএস উভয়কেই পরিবেশন করতে হবে, তবে যখন প্রবাহটি পুনর্নির্দেশের বিষয়টি প্রকাশ করে (উদাহরণস্বরূপ, কোনও ফর্ম প্রক্রিয়া করার পরে), সমস্ত এইচটিটিপিএস অনুরোধগুলি HTTP তে পুনঃনির্দেশিত হয়। আমি খুঁজে পেয়েছি যে এই সমস্যাটি সংশোধন করবে কেবলমাত্র proxy_redirectতা নিম্নলিখিতটিতে পরিবর্তিত হচ্ছে :

proxy_redirect http:// https://;

এটি এইচটিটিপিএস থেকে আসা অনুরোধগুলির জন্য আশ্চর্যজনকভাবে কাজ করে, তবে এইচটিটিপি-র মাধ্যমে যদি কোনও পুনর্নির্দেশ জারি করা হয় তবে এটি এটি এইচটিটিপিএসেও পুনর্নির্দেশ করে, যা একটি সমস্যা।

হতাশার বাইরে, আমি চেষ্টা করেছি:

if ($scheme = 'https') {
    proxy_redirect http:// https://;
}

তবে এনজিনেক্স অভিযোগ করেছেন যে proxy_redirectএখানে অনুমোদিত নয়।

আমি অন্য যে বিকল্পটি ভাবতে পারি তা হ'ল দুটি সার্ভারকে আলাদা আলাদাভাবে সংজ্ঞায়িত করা এবং proxy_redirectকেবল এসএসএল-তে সেট করা , তবে তারপরে আমি আমার বাকী বাকীটিকে নকল করে দিতাম ( serverযে সরলতার জন্য আমি বাদ দিয়েছিলাম সেই নির্দেশিকায় অনেক কিছুই রয়েছে )। আমি জানি includeযে অপ্রয়োজনীয়তা নির্ধারণের জন্য আমি একটি নির্দেশিকাও ব্যবহার করতে পারি , তবে আমি সত্যিই কোনও নির্ভরতা ছাড়াই কেবল একটি কনফ ফাইল রাখতে চাই।

সুতরাং, প্রথমে, আমি কি এমন কিছু মিস করছি যা সমস্যাটিকে পুরোপুরি উপেক্ষা করবে? অথবা, দ্বিতীয়টি, যদি না হয়, অপ্রয়োজনীয় কনফিগারেশনের তথ্যগুলি বের করার জন্য অন্য কোনও উপায় (বাহ্যিক ফাইল সহ) রয়েছে কি যাতে আমি সার্ভার কনফিগারেশনের HTTP এবং HTTPS সংস্করণগুলি পৃথক করতে পারি?

উত্তর:


29

ঠিক আছে, আমি কিছুটা অনুপ্রেরণা পেয়েছি এবং চেষ্টা করেছি:

proxy_redirect http:// $scheme://;

যা দেখে মনে হয় কৌতুকটি করছে। যদিও এটি এখনও আমার কাছে হ্যাকি মনে হচ্ছে, তাই আমি এখনও একই ফলাফল অর্জনের জন্য যে কোনও ভুল বা কম হ্যাকি উপায়গুলি করতে পারি তার কোনও দিকনির্দেশকে স্বাগত জানাই।


প্রকৃতপক্ষে, যে "সরকারী" পথ এটা করতে হবে বলে মনে হয় ... দেখুন wiki.nginx.org/SSL-Offloader
হেন্ডি উত্থাপন Irawan

Nginx উইকির উপরের লিঙ্কটি আর কাজ করে না, নতুন অবস্থানটি হ'ল nginx.com/resources/wiki/start/topics/example/SSL-Offloader
পল টোবিয়াস

আপনার অবস্থানের পিছনে স্ল্যাশ না থাকলে এটি কাজ করবে না
এইচডিভ

godশ্বর ফাক, ধিক্কার, কেন সফ্টওয়্যার কেবল বিপরীত প্রক্সি (বা কমপক্ষে গডডাম সম্মান করে এক্স-ফরওয়ার্ডেড-স্কিম বা অন্য কিছুকে সম্মান করে? বালেট +
এক্সেল

5

অন্য সমাধানটি প্রবাহকে নির্দেশটি হ'ল অনুরোধটি এইচটিটিপি বা এইচটিটিপিএস কিনা এবং সেই অনুযায়ী পুনর্নির্দেশটি ইস্যু করে। এটিকে এনজিনেক্স কনফিগারেশনে যুক্ত করা উপরিভাগের জন্য পরীক্ষা করতে একটি শিরোনাম সেট করে।

proxy_set_header    X-Scheme $scheme;

আহ, আমি এখন দেখছি যে আপনার কাছে ইতিমধ্যে কনফিগারেশন রয়েছে।
মিগ্রোর্ভেন

হাঁ। তবে আমি তবুও সাহায্য করার চেষ্টাটির প্রশংসা করি।
ক্রিস প্র্যাট

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