วิธีตั้งค่า robots.txt แบบโกลบอลเป็น nginx สำหรับโฮสต์เสมือนทั้งหมด


13

ฉันกำลังพยายามตั้งค่าrobots.txtสำหรับโฮสต์เสมือนทั้งหมดภายใต้เซิร์ฟเวอร์ nginx http ฉันสามารถทำได้ใน Apache โดยใส่สิ่งต่อไปนี้เป็นหลักhttpd.conf:

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

ฉันพยายามทำสิ่งที่คล้ายกับ nginx โดยเพิ่มบรรทัดที่ระบุด้านล่าง (a) ภายใน nginx.conf และ (b) รวม conf.d / robots.conf

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

ฉันได้ลองกับ '=' และแม้แต่วางไว้ในโฮสต์เสมือนหนึ่งเพื่อทดสอบ ดูเหมือนจะไม่มีอะไรทำงาน

ฉันหายไปนี่อะไร มีวิธีอื่นในการบรรลุเป้าหมายนี้หรือไม่?


หมายเหตุ: ไม่มีวิธีที่จะทำให้เป็นการตั้งค่าส่วนกลาง (เช่นตั้งค่าในไฟล์เดียวที่ใช้กับโฮสต์เสมือนทั้งหมดโดยไม่มีคำสั่ง include) หนึ่งสามารถตั้งค่า robots.conf ใน conf.d (หรือ global.d [ที่ไม่ได้มาตรฐาน]) และรวมไว้ในการกำหนดค่าโฮสต์เสมือนทุกรายการ คำตอบอื่น ๆ ทั้งหมดชี้ไปที่วิธีการต่าง ๆ ในการทำสิ่งเดียวกัน ได้แก่ : proxy_pass, retrun {} ฯลฯ
anup

คำตอบ:


4

ไม่สามารถใช้ตำแหน่งในhttpบล็อก nginx ไม่มีนามแฝงส่วนกลาง (เช่นนามแฝงที่สามารถกำหนดได้สำหรับ vhost ทั้งหมด) บันทึกคำจำกัดความโกลบอลของคุณในโฟลเดอร์และรวมไว้

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

ตามที่ระบุในคำถามที่ฉันได้ลองทำโดยใส่ robots.conf ในโฟลเดอร์ conf.d แต่มันไม่ทำงานเหมือนโลก
anup

ต่อเนื่อง ... อย่างที่คุณพูด Nginx ไม่มีนามแฝงทั่วโลก ในที่สุดความละเอียดก็คือการเพิ่มต่อการกำหนดค่าโฮสต์เสมือน
anup

44

คุณสามารถตั้งค่าเนื้อหาของไฟล์ robots.txt ได้โดยตรงในการกำหนดค่า nginx:

    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)$แข่งขันอื่นด้านล่างมันทับมัน
Beebee

สามารถเพิ่มสิ่งนี้ลงในระเบียบได้conf.d/robots.confอย่างไร เนื่องจากไม่อนุญาตให้ใช้คำสั่ง "ตำแหน่ง" ที่นี่ซึ่งสมเหตุสมผล แต่ไม่เหมาะสำหรับเซิร์ฟเวอร์เฉพาะ ฉันไม่แน่ใจเกี่ยวกับ @ user79644 ตอบคำถามนี้ จำเป็นต้องเพิ่มสิ่งนี้ในเว็บไซต์หรือไม่
Pablo A

ฉันยังไม่ได้ทดสอบสิ่งนี้ แต่มีลักษณะคล้ายกับคำถามที่กล่าวถึงยกเว้นว่ามีการใช้ "การส่งคืน" แทนนามแฝง ปัญหาที่ฉันเผชิญคือการทำให้มันเป็นที่รู้จักทั่วโลก ซึ่งหมายความว่าฉันไม่ควรทำซ้ำในทุก. conf ของเว็บไซต์ ฉันไม่สามารถใช้วิธีการทั่วโลกในการทำงานกับ Apache ได้ พูดเช่นเซิร์ฟเวอร์การพัฒนาที่ไม่ควรรวบรวมข้อมูล
anup

10

มีกฎอื่นที่กำหนดไว้หรือไม่? อาจจะไฟล์ common.conf หรือไฟล์ conf อื่นรวมอยู่ด้วยซึ่งเป็นการปรับแต่งค่าของคุณ หนึ่งในสิ่งต่อไปนี้ควรใช้งานได้อย่างแน่นอน

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" มีความสำคัญเหนือกว่าตำแหน่ง "คำนำหน้า"

มันไม่ทำงานเป็นตัวเลือกระดับโลก แต่ทำงานภายในการตั้งค่าของ virtualhost ฉันใช้อันแรก (location /robots.txt) และแม้แต่อันที่ฉันระบุด้วยคำถาม ('~ * /robots.txt') ทั้งสองทำงานจากการกำหนดค่าโฮสต์เสมือน ฉันคิดว่าการใช้ 'ตำแหน่งที่ตั้ง' 'ถ้า {}' อยู่ภายใต้คำสั่ง 'เซิร์ฟเวอร์' และนี่อาจเป็นไปไม่ได้ในระดับโลก
anup

ตรวจสอบให้แน่ใจว่าคุณมี/robots.txtไฟล์นามแฝง ฉันไม่ได้รับrootตัวเลือกให้ทำงาน
Shadoath

-1

ฉันมีปัญหาเดียวกันกับการท้าทายจุดสูงสุด แต่ก็ใช้หลักการเดียวกันกับกรณีของคุณเช่นกัน

สิ่งที่ฉันทำเพื่อแก้ไขปัญหานี้คือการย้ายเว็บไซต์ทั้งหมดของฉันไปยังพอร์ตที่ไม่ได้มาตรฐานฉันเลือก8081และสร้างเซิร์ฟเวอร์เสมือนที่ฟังบนพอร์ต 80 มันพร็อกซี่การร้องขอทั้งหมดไป127.0.0.1:8081ยกเว้นที่รู้จักกันดี สิ่งนี้ทำหน้าที่เสมือนนามแฝงระดับโลกโดยมีฮ็อพเสริมหนึ่งครั้ง แต่ไม่ควรทำให้ประสิทธิภาพลดลงอย่างมีนัยสำคัญเนื่องจากลักษณะ async ของ nginx

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.