2014-10-10 13 views
7

सारांशNginx: alternte डोमेन के लिए अलग robots.txt

मैंने इसे एक आंतरिक और बाह्य डोमेन की ओर इशारा करते के साथ एक एकल वेब अनुप्रयोग है, और मैं कोई robots.txt आंतरिक डोमेन के इस्तेमाल के सभी ब्लॉक करना चाहते हैं , लेकिन बाहरी डोमेन तक पहुंच की अनुमति दें।

समस्या विस्तार से

मैं एक साधारण Nginx सर्वर ब्लॉक है कि मैं एक Django आवेदन करने के लिए प्रॉक्सी के लिए इस्तेमाल किया है (नीचे देखें)। जैसा कि आप देख सकते हैं, यह सर्वर ब्लॉक किसी भी डोमेन का जवाब देता है (server_name पैरामीटर की कमी के कारण)। हालांकि, मैं सोच रहा हूं कि विशिष्ट डोमेन कैसे चिह्नित करें जैसे कि Nginx उनके लिए एक कस्टम robots.txt फ़ाइल की सेवा करेगा।

अधिक विशेष रूप से, डोमेन example.com और www.example.com कहें htdocs निर्देशिका से डिफ़ॉल्ट robots.txt फ़ाइल की सेवा करेगा। (चूंकि "रूट/साइट्स/माइसाइट/htdocs" सेट है और robots.txt फ़ाइल /sites/mysite/htdocs/robots.txt पर स्थित है)

लेकिन, मैं डोमेन "example.internal.com भी चाहता हूं "(जो example.com के समान सर्वर को संदर्भित करता है) कस्टम robots.txt फ़ाइल की सेवा के लिए; मैं एक कस्टम robots.txt बनाना चाहता हूं, इसलिए Google उस आंतरिक डोमेन को अनुक्रमित नहीं करता है।

मैंने सर्वर ब्लॉक को डुप्लिकेट करने और सर्वर ब्लॉक में से किसी एक को निर्दिष्ट करने के बारे में सोचा था। और उसके बाद उस सर्वर ब्लॉक में robots.txt लुकअप को ओवरराइड करना।

"server_name internal.example.com;" 

लेकिन इस उद्देश्य के लिए पूरे सर्वर ब्लॉक को डुप्लिकेट करना बहुत शुष्क नहीं लगता है।

मैंने यह भी जांचने के लिए एक कथन का उपयोग करने के बारे में सोचा था कि होस्ट हेडर में आंतरिक डोमेन है या नहीं। और फिर उस तरह से कस्टम robots.txt फ़ाइल की सेवा। लेकिन Nginx कहते हैं If Is Evil

किसी आंतरिक डोमेन के लिए कस्टम robots.txt फ़ाइल की सेवा करने के लिए एक अच्छा तरीका क्या है?

आपकी मदद के लिए धन्यवाद।

यहां सर्वर ब्लॉक का एक कोड नमूना है जिसका मैं उपयोग कर रहा हूं।

upstream app_server { 
    server unix:/sites/mysite/var/run/wsgi.socket fail_timeout=0; 
} 

server { 
    listen 80; 

    root /sites/mysite/htdocs;  

    location/{ 
     try_files $uri @proxy_to_app; 
    } 

    location @proxy_to_app { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Protocol $scheme; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Scheme $scheme; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass http://app_server; 
    } 
} 

उत्तर

14

आप map का उपयोग एक सशर्त चर को परिभाषित कर सकते हैं।

map $host $robots_file { 
    default robots.txt; 
    internal.example.com internal-robots.txt; 
} 

तब चर इस तरह try_files के साथ प्रयोग किया जा सकता है::

server_name internal.example.com; 

location = /robots.txt { 
    try_files /$robots_file =404; 
} 

अब आप अपने जड़ में दो रोबोट पाठ फाइलों हो सकता है:

इस बाहर अपने सर्वर निर्देश जोड़े
robots.txt 
internal-robots.txt 
+0

उस दृष्टिकोण के लिए आपको बहुत धन्यवाद, Putnamhill। ऐसा लगता है कि मैं क्या करने की कोशिश कर रहा हूं। –

+2

आपका स्वागत है, जो। यह हल करने के लिए एक मजेदार पहेली थी। –

संबंधित मुद्दे