यदि आप return 301 https://$host$request_uri;
पोर्ट 80 पर डिफ़ॉल्ट प्रतिक्रिया के रूप में हैं, तो आपका सर्वर जल्द ही या बाद में खुली प्रॉक्सी [1] की सूची में शामिल हो सकता है और इंटरनेट पर कहीं और ट्रैफ़िक भेजने के लिए दुर्व्यवहार करना शुरू कर सकता है। यदि आपके लॉग इस तरह के संदेशों से भरते हैं, तो आप जानते हैं कि यह आपके साथ हुआ है:
42.232.104.114 - - [25/Mar/2018:04:50:49 +0000] "GET http://www.ioffer.com/i/new-fashion-fine-gold-bracelet-versaec-bracelet-641175733 HTTP/1.1" 301 185 "http://www.ioffer.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Hotbar 4.1.8.0; RogueCleaner; Alexa Toolbar)"
समस्या यह है कि $host
जो भी ब्राउज़र Host
हेडर या यहां तक कि होस्टनाम को HTTP की ओपनिंग लाइन से भेजता है, उसे इस तरह से प्रतिध्वनित करेगा :
GET http://www.ioffer.com/i/new-fashion-fine-gold-bracelet-versaec-bracelet-641175733 HTTP/1.1
उस समस्या के कारण, यहाँ कुछ अन्य उत्तर $server_name
इसके बजाय उपयोग करने की सलाह देते हैं $host
। $server_name
हमेशा इस बात का मूल्यांकन करता है कि आपनेserver_name
घोषणा में क्या रखा है । लेकिन अगर आपके पास वहाँ कई उप-डोमेन हैं या वाइल्डकार्ड का उपयोग करते हैं, तो यह काम नहीं करेगा, क्योंकि $server_name
केवल घोषणा के बाद पहली प्रविष्टि का उपयोग करता है server_name
, और इससे भी महत्वपूर्ण बात यह है कि एक वाइल्डकार्ड वापस आ जाएगा (इसे विस्तारित नहीं करें)।
तो सुरक्षा बनाए रखते हुए कई डोमेन का समर्थन कैसे करें? अपने स्वयं के सिस्टम पर मैंने पहली बार एक default_server
ब्लॉक को सूचीबद्ध करने से इस दुविधा से निपटा है जो उपयोग नहीं करता है $host
, और फिर वाइल्डकार्ड ब्लॉक को सूचीबद्ध करता है:
server {
listen 80 default_server;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen 80;
server_name *.example.com;
return 301 https://$host$request_uri;
}
(आप दूसरे ब्लॉक में एक से अधिक डोमेन भी सूचीबद्ध कर सकते हैं।)
उस संयोजन के साथ, बेजोड़ डोमेन हार्डकोडेड (हमेशा example.com
) कहीं न कहीं पुनर्निर्देशित हो जाएगा , और आपके खुद से मेल खाने वाले डोमेन सही जगह पर जाएंगे। आपका सर्वर एक खुले प्रॉक्सी के रूप में उपयोगी नहीं होगा, इसलिए आप परेशानी को आकर्षित नहीं करेंगे।
यदि आप अलंकार महसूस कर रहे हैं, तो मुझे लगता है कि आप default_server
ब्लॉक मैच को अपने किसी भी वैध डोमेन से नहीं बना सकते हैं और कुछ आक्रामक सेवा कर सकते हैं। । । ।
[१] तकनीकी रूप से "प्रॉक्सी" गलत शब्द है, क्योंकि आपका सर्वर बाहर नहीं जा रहा है और ग्राहकों के लिए अनुरोधों को पूरा कर रहा है, सिर्फ एक रीडायरेक्ट भेज रहा है, लेकिन मुझे यकीन नहीं है कि सही शब्द क्या होगा। मुझे यह भी पता नहीं है कि लक्ष्य क्या है, लेकिन यह आपके लॉग को शोर से भरता है और आपके सीपीयू और बैंडविड्थ का उपभोग करता है, इसलिए आप इसे रोक सकते हैं।