এখানে আমার সংক্ষিপ্ত 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 সংস্করণগুলি পৃথক করতে পারি?