প্রশ্ন বিপরীত প্রক্সি হিসাবে ব্যবহৃত যখন https থেকে http থেকে ট্রাফিক পুনঃনির্দেশ থেকে nginx প্রতিরোধ


এখানে আমার সংক্ষিপ্ত nginx vhost conf:

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 এবং HTTPS উভয়কে পরিবেশন করতে হবে, তবে, আপস্ট্রিমটি একটি পুনঃনির্দেশকে ইস্যু করে (উদাহরণস্বরূপ, একটি ফর্ম প্রক্রিয়া হওয়ার পরে), সমস্ত HTTPS অনুরোধ HTTP তে পুনঃনির্দেশিত হয়। একমাত্র জিনিস যা আমি পেয়েছি এই সমস্যাটি ঠিক করবে তা পরিবর্তন হচ্ছে proxy_redirect পরবর্তী:

proxy_redirect http:// https://;

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

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

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

কিন্তু nginx যে অভিযোগ proxy_redirect এখানে অনুমতি দেওয়া হয় না।

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

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


12
2018-03-23 21:08


উত্স




উত্তর:


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

proxy_redirect http:// $scheme://;

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


24
2018-03-23 21:24



প্রকৃতপক্ষে, এটি করার জন্য "সরকারী" উপায় বলে মনে হচ্ছে ... দেখুন wiki.nginx.org/SSL-Offloader - Hendy Irawan
Nginx উইকি থেকে উপরের লিঙ্কটি আর কাজ করে না, নতুন অবস্থান হয় nginx.com/resources/wiki/start/topics/examples/SSL-Offloader - Paul Tobias
আপনার অবস্থান একটি পিছনে স্ল্যাশ না থাকলে এটি কাজ করবে না - hdave


অন্য সমাধানটি অনুরোধটি HTTP বা HTTPS কিনা তা আপস্ট্রিমকে নির্দেশ করে এবং এটি পুনঃনির্দেশিত করে তা ইস্যু করে। Nginx কনফিগারেশনে এটি যোগ করার ফলে আপস্ট্রিমের পরিদর্শন করার জন্য একটি হেডার সেট করা হবে।

proxy_set_header    X-Scheme $scheme;

5
2018-03-23 23:02



আহ, আমি এখন আপনি ইতিমধ্যে যে কনফিগারেশন আছে দেখুন। - mgorven
হাঁ। কিন্তু তবুও আমি সাহায্য করার চেষ্টা করি। - Chris Pratt
এই কিছু triky শিরোনাম মনে হচ্ছে। আমি মনে করি এক্স-ফরোয়ার্ড করা-প্রোটো ভাল - vladkras