सभी वर्चुअल होस्ट के लिए nginx में विश्व स्तर पर robots.txt कैसे सेट करें


13

मैं robots.txtnginx http सर्वर के तहत सभी वर्चुअल होस्ट के लिए सेट करने का प्रयास कर रहा हूं । मैं इसे मुख्य में निम्नलिखित डालकर अपाचे में करने में सक्षम था httpd.conf:

<Location "/robots.txt">
    SetHandler None
</Location>
Alias /robots.txt /var/www/html/robots.txt

मैंने nginx.conf और (b) के नीचे दिए गए लाइनों को जोड़कर nginx के साथ ऐसा ही कुछ करने की कोशिश की।

location ^~ /robots.txt {
        alias /var/www/html/robots.txt;
}

मैंने '=' के साथ कोशिश की है और यहां तक ​​कि इसे परीक्षण करने के लिए वर्चुअल होस्ट में से एक में डाल दिया है। कुछ भी काम नहीं लग रहा था।

मुझे यहां क्या समझ नहीं आ रहा है? क्या इसे प्राप्त करने का एक और तरीका है?


नोट: इसे ग्लोबल सेटिंग के रूप में रखने का कोई तरीका नहीं था (यानी एक फाइल में सेट करें जो सभी वर्चुअल होस्ट पर बिना किसी विवरण के लागू होता है)। एक conf.d (या Global.d [गैर-मानक]) में एक robots.conf सेट कर सकता है और हर वर्चुअल होस्ट कॉन्फिग में शामिल कर सकता है। अन्य सभी उत्तर समान कार्य करने के विभिन्न तरीकों की ओर इशारा करते हैं: प्रॉक्सी_पास, रिट्रुन {} आदि
अनूप

जवाबों:


4

स्थान का उपयोग httpब्लॉक के अंदर नहीं किया जा सकता है । nginx में वैश्विक उपनाम नहीं हैं (यानी, उपनाम जो सभी vhosts के लिए परिभाषित किए जा सकते हैं)। अपनी वैश्विक परिभाषाओं को एक फ़ोल्डर में सहेजें और उन्हें शामिल करें।

server {
  listen 80;
  root /var/www/html;
  include /etc/nginx/global.d/*.conf;
}

जैसा कि प्रश्न में दिया गया था मैंने conf.d फ़ोल्डर में robots.conf डालकर ऐसा करने की कोशिश की थी। लेकिन यह वैश्विक के रूप में काम नहीं करता है।
अनूप

cont'd ... जैसा कि आपने कहा, Nginx में वैश्विक उपनाम नहीं हैं। आखिरकार रिज़ॉल्यूशन इसे वर्चुअल होस्ट कॉन्फ़िगरेशन के अनुसार जोड़ना था।
अनूप

44

आप सीधे nginx config में robots.txt फ़ाइल की सामग्री सेट कर सकते हैं:

    location = /robots.txt { return 200 "User-agent: *\nDisallow: /\n"; }

सही सामग्री-प्रकार जोड़ना भी संभव है:

    location = /robots.txt {
       add_header Content-Type text/plain;
       return 200 "User-agent: *\nDisallow: /\n";
    }

1
बस एक नोट: मुझे लगाने की जरूरत है location = /robots.txt(नोट द बराबरी साइन) अन्यथा location ~* \.(txt|log)$इसके नीचे एक और मैच इसे ओवरराइड कर रहा था।
बीबी

यह कैसे एक साफ जोड़ा जा सकता है conf.d/robots.conf? जैसा कि "स्थान" निर्देश यहां अनुमति नहीं है , जो उचित है, लेकिन यह किसी विशेष सर्वर के लिए नहीं है। मुझे इस पर @ user79644 उत्तर के बारे में निश्चित नहीं है। क्या प्रत्येक साइट पर इसे जोड़ना अपरिहार्य है?
पाब्लो ए

मैंने इसका परीक्षण नहीं किया है। लेकिन, प्रश्न में एक के समान दिखता है, सिवाय इसके कि उपनाम के स्थान पर एक 'वापसी' का उपयोग किया जाता है। मैंने जो समस्या पेश की है, वह इसे वैश्विक सेटिंग बनाना है। जिसका मतलब है कि मैं इसे वेबसाइट के हर .conf में नहीं दोहरा सकता। अपाचे के साथ काम करने के तरीके को काम करने के लिए मुझे वैश्विक तरीका नहीं मिला। उदाहरण के लिए एक विकास सर्वर को क्रॉल नहीं किया जाना चाहिए।
अनूप

10

क्या अन्य नियम हैं जो परिभाषित हैं? हो सकता है कि आम.कॉन्फ़ या किसी अन्य फ़ाइल को शामिल किया जाए जो आपके कॉन्फिग-राइड से अधिक हो। निम्नलिखित में से एक को निश्चित रूप से काम करना चाहिए।

location /robots.txt { alias /home/www/html/robots.txt; }
location /robots.txt { root /home/www/html/;  }
  1. Nginx सभी "regexp" स्थानों को उनकी उपस्थिति के क्रम में चलाता है। यदि कोई भी "regexp" स्थान सफल होता है, तो Nginx इस पहले मैच का उपयोग करेगा। यदि कोई "regexp" स्थान सफल नहीं हुआ, तो Nginx पिछले चरण में पाए गए साधारण स्थान का उपयोग करता है।
  2. "regexp" स्थानों की "उपसर्ग" स्थानों पर पूर्वता है

यह एक वैश्विक विकल्प के रूप में काम नहीं करता है। लेकिन, एक वर्चुअलहोस्ट के कॉन्फिगरेशन के भीतर काम करता है। मैंने पहले एक का उपयोग किया (स्थान /robots.txt) और यहां तक ​​कि एक जिसे मैंने प्रश्न में निर्दिष्ट किया ('~ * /robots.txt')। दोनों ने वर्चुअल होस्ट के कॉन्फ़िगरेशन से बाहर काम किया। मुझे लगता है कि '' '' का उपयोग अगर {} '' सर्वर '' निर्देश के अंतर्गत आता है और यह, शायद वैश्विक स्तर पर काम नहीं करता है।
अनूप

सुनिश्चित करें कि आपके पास /robots.txtउपनाम के लिए एक फ़ाइल है। मुझे rootकाम करने का विकल्प नहीं मिला ।
शादुथ

-1

मेरे पास एक्मे चालान के साथ एक ही मुद्दा था, लेकिन आपके मामले में भी यही सिद्धांत लागू होता है।

इस समस्या को हल करने के लिए मैंने अपनी सभी साइटों को एक गैर-मानक पोर्ट पर ले जाने के लिए किया था, मैंने उठाया 8081और पोर्ट 80 पर सुनने वाला एक वर्चुअल सर्वर बनाया। यह सभी अनुरोधों 127.0.0.1:8081को सम्‍मिलित करता है। यह लगभग एक अतिरिक्त आशा के साथ, एक वैश्विक उपनाम के रूप में कार्य करता है, लेकिन यह nginx की async प्रकृति के कारण प्रदर्शन में महत्वपूर्ण गिरावट का कारण नहीं होना चाहिए।

upstream nonacme {
  server 127.0.0.1:8081;
}

server {
  listen 80;

  access_log  /var/log/nginx/acme-access.log;
  error_log   /var/log/nginx/acme-error.log;

  location /.well-known {
    root /var/www/acme;
  }

  location / {
    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_set_header    X-Frame-Options     SAMEORIGIN;

    # WebSocket support (nginx 1.4)
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_pass http://nonacme;
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.