সমস্ত ভার্চুয়াল হোস্টের জন্য এনগিনেক্সে কীভাবে বিশ্বব্যাপী রোবটস.টেক্সট সেট করবেন


13

আমি robots.txtnginx HTTP সার্ভারের অধীনে সমস্ত ভার্চুয়াল হোস্টের জন্য সেট করার চেষ্টা করছি । নিম্নলিখিতটি প্রধানত রেখে অ্যাপাচে এটি করতে পেরেছি httpd.conf:

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

আমি এনজিএনক্সের সাথে অনুরূপ কিছু করার চেষ্টা করলাম নীচে (ক) এনজিনএক্স.কনফ এবং (বি) হিসাবে কনফিডেড / রোবটস কনফ অন্তর্ভুক্ত লাইনগুলি যুক্ত করে

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

আমি '=' দিয়ে চেষ্টা করেছি এবং এটি পরীক্ষার জন্য এটি ভার্চুয়াল হোস্টের একটিতে রেখেছি। কিছুই কাজ করছিল বলে মনে হয়নি।

আমি এখানে কি মিস করছি? এটি অর্জনের অন্য কোনও উপায় আছে কি?


দ্রষ্টব্য: এটিকে বিশ্বব্যাপী সেটিং হিসাবে স্থাপন করার কোনও উপায় ছিল না (যেমন একটি ফাইলের মধ্যে সেট যা কোনও বিবৃতি ছাড়াই সমস্ত ভার্চুয়াল হোস্টের জন্য প্রযোজ্য)। কেউ কনফিডে (বা গ্লোবাল.ডি [অ-মানক]) এ একটি রোবটস কনফ সেট করতে পারে এবং প্রতিটি ভার্চুয়াল হোস্ট কনফিগারেশনে এটি অন্তর্ভুক্ত করতে পারে। অন্যান্য সমস্ত উত্তর একই জিনিস করার বিভিন্ন উপায়ের দিকে ইঙ্গিত করে: প্রক্সি_পাস, রিট্রান {} ইত্যাদি
আনুপ

উত্তর:


4

অবস্থানটি httpব্লকের ভিতরে ব্যবহার করা যায় না । এনগিনেক্সে বিশ্বব্যাপী উপাধি নেই (অর্থাত্, সমস্ত উপকরণের জন্য সংজ্ঞা দেওয়া যায় এমন এলিয়াস)। আপনার বিশ্বব্যাপী সংজ্ঞাগুলি একটি ফোল্ডারে সংরক্ষণ করুন এবং সেগুলি অন্তর্ভুক্ত করুন।

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

প্রশ্নে দেওয়া হিসাবে আমি কনফ। ডি ফোল্ডারে রোবটস কনফ করে রেখে তা করার চেষ্টা করেছি। তবে এটি বিশ্বব্যাপী হিসাবে কাজ করে না।
অনুপ

cont'd ... যেমন আপনি বলেছিলেন, Nginx এর বিশ্বব্যাপী উপকরণ নেই। অবশেষে রেজুলেশনটি প্রতি ভার্চুয়াল হোস্ট কনফিগারেশনে এটি যুক্ত করা হয়েছিল।
অনুপ

44

আপনি সরাসরি এনগিনেক্স কনফিগারেশনে রোবটস.টেক্সট ফাইলের সামগ্রীগুলি সেট করতে পারেন:

    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" অবস্থানগুলি তাদের উপস্থিতির ক্রম অনুসারে চালায়। যদি কোনও "রেজিপেক্স" অবস্থান সফল হয় তবে এনগিনেক্স এই প্রথম ম্যাচটি ব্যবহার করবে। যদি কোনও "রেজিপেক্স" অবস্থান সফল হয় না, এনগিনেক্স আগের ধাপে পাওয়া সাধারণ অবস্থানটি ব্যবহার করে।
  2. "regexp" অবস্থানগুলির "উপসর্গ" অবস্থানগুলির চেয়ে প্রাধান্য রয়েছে

এটি বৈশ্বিক বিকল্প হিসাবে কাজ করে না। তবে, ভার্চুয়ালহোস্টের কনফিগারেশনের মধ্যে কাজ করে। আমি প্রথমটি (অবস্থান /robots.txt) এবং এমনকী আমি প্রশ্নে উল্লিখিত একটি ('~ * /robots.txt') ব্যবহার করেছি। দুজনেই ভার্চুয়াল হোস্টের কনফিগারেশনের বাইরে কাজ করেছেন। আমি মনে করি যদি 'সার্ভার' নির্দেশের আওতায় পড়ে এবং এটি সম্ভবত বিশ্বস্তরে কাজ করে না তবে 'অবস্থান' এর ব্যবহার।
অনুপ

আপনার /robots.txtকাছে উপনামের ফাইল আছে কিনা তা নিশ্চিত করুন । আমি rootকাজের বিকল্প পেলাম না ।
শাডাথ

-1

অ্যাকমে চ্যালেঞ্জগুলি নিয়ে আমার একই সমস্যা ছিল, তবে একই নীতিটি আপনার ক্ষেত্রেও প্রযোজ্য।

আমি এই সমস্যাটি সমাধান করার জন্য যা করেছি তা হ'ল আমার সমস্ত সাইটগুলিকে একটি মানহীন বন্দরে নিয়ে যাওয়া, আমি বাছাই করেছিলাম 8081এবং ৮০ বন্দরটিতে একটি ভার্চুয়াল সার্ভার তৈরি করেছিলাম। এটি 127.0.0.1:8081পরিচিতিগুলির ব্যতীত সমস্ত অনুরোধের প্রক্সি করে well এটি একটি অতিরিক্ত হপ সহ প্রায় এক গ্লোবাল ওরফে হিসাবে কাজ করে, তবে এটি এনজিনেক্সের অ্যাসিঙ্ক প্রকৃতির কারণে পারফরম্যান্সে উল্লেখযোগ্য হ্রাস ঘটায় না।

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;
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.