2008-10-22 23 views
14

Tôi có một số máy chủ dàn dựng trên internet công cộng chạy các bản sao của mã sản xuất cho một vài trang web. Tôi thực sự không thích nó nếu các trang dàn dựng được lập chỉ mục.Tôi có thể chặn trình thu thập thông tin tìm kiếm cho mọi trang web trên máy chủ web Apache không?

Có cách nào tôi có thể sửa đổi httpd.conf trên máy chủ dàn dựng để chặn trình thu thập dữ liệu của công cụ tìm kiếm không?

Thay đổi robots.txt sẽ không thực sự hoạt động vì tôi sử dụng tập lệnh để sao chép cùng một cơ sở mã cho cả hai máy chủ. Ngoài ra, tôi không muốn thay đổi các tập tin conf host ảo hoặc là có một loạt các trang web và tôi không muốn phải nhớ để sao chép trên một thiết lập nhất định nếu tôi thực hiện một trang web mới.

Trả lời

29

Tạo một robot.tệp txt với các nội dung sau:

User-agent: * 
Disallow:/

Đặt tệp đó ở đâu đó trên máy chủ dàn dựng của bạn; thư mục gốc của bạn là một nơi tuyệt vời cho nó (ví dụ: /var/www/html/robots.txt).

Thêm dòng sau vào file httpd.conf của bạn:

# Exclude all robots 
<Location "/robots.txt"> 
    SetHandler None 
</Location> 
Alias /robots.txt /path/to/robots.txt 

Chỉ thị SetHandler có lẽ là không cần thiết, nhưng nó có thể là cần thiết nếu bạn đang sử dụng một trình xử lý như mod_python, ví dụ.

Tệp robots.txt đó giờ đây sẽ được phân phối cho tất cả máy chủ ảo trên máy chủ của bạn, ghi đè bất kỳ tệp robots.txt nào mà bạn có thể có cho máy chủ riêng lẻ.

(Lưu ý: Câu trả lời của tôi về cơ bản giống như câu trả lời của ceejayoz là gợi ý bạn, nhưng tôi phải dành thêm vài phút để tìm ra tất cả các chi tiết cụ thể để làm cho nó hoạt động. vì lợi ích của những người khác có thể vấp ngã khi câu hỏi này.)

+0

đã cứu tôi rất nhiều thời gian. Thnx. – Khuram

+0

'Bí danh' là gì? Nếu tôi có nhiều vhost, tôi có nên tạo một 'Bí danh' cho mỗi cái không? – nicoX

+0

@nicoX: Bạn không cần phải tạo một 'Bí danh' riêng biệt cho mỗi vhost. Cái bạn tạo ở đây sẽ áp dụng cho tất cả vhost bạn tạo. – jsdalton

2

Bạn có thể đặt bí danh robots.txt trên máy chủ ảo dàn dựng thành một tệp robots.txt hạn chế được lưu trữ ở một vị trí khác không?

1

Tùy thuộc vào tình huống triển khai của bạn, bạn nên tìm cách triển khai các tệp robots.txt khác nhau cho dev/stage/test/prod (hoặc bất kỳ kết hợp nào bạn có). Giả sử bạn có các tệp cấu hình cơ sở dữ liệu khác nhau hoặc (hoặc bất kỳ điều gì tương tự) trên các máy chủ khác nhau, điều này sẽ theo một quá trình tương tự (bạn do có mật khẩu khác nhau cho cơ sở dữ liệu của mình, đúng không?)

Nếu bạn không có quy trình triển khai một bước tại chỗ, đây có lẽ là động lực tốt để có được ... có rất nhiều công cụ cho môi trường khác nhau - Capistrano là một công cụ khá hay và được ưu tiên trong thế giới Rails/Django, nhưng không có có nghĩa là người duy nhất.

Không tất cả những gì, có lẽ bạn có thể thiết lập một chỉ thị bí danh toàn cầu trong cấu hình Apache của bạn mà sẽ áp dụng cho tất cả các VirtualHosts và hướng đến một robots.txt hạn chế

2

Để thực sự ngăn chặn các trang từ được lập chỉ mục, bạn sẽ cần phải ẩn các trang web sau HTTP auth. Bạn có thể làm điều này trong cấu hình Apache toàn cục của bạn và sử dụng một tệp .htpasswd đơn giản.

Chỉ có nhược điểm là bạn phải nhập tên người dùng/mật khẩu vào lần đầu tiên bạn duyệt đến bất kỳ trang nào trên máy chủ dàn dựng.

+0

có vấn đề với cách tiếp cận này, khi bạn muốn hiển thị một số API cho các dịch vụ khác nhau không hỗ trợ Xác thực HTTP. Trong trường hợp này, bạn sẽ phải vô hiệu hóa nó cho máy chủ lưu trữ cụ thể, điều này có thể dẫn đến sự lộn xộn trong thời gian. –

4

Bạn có thể sử dụng mod_rewrite của Apache để thực hiện. Giả sử rằng máy chủ thực của bạn là www.example.com và máy chủ lưu trữ của bạn là staging.example.com. Tạo một tệp có tên 'robots-staging.txt' và có điều kiện ghi lại yêu cầu để đi đến đó.

Ví dụ này có thể phù hợp để bảo vệ một site trung gian duy nhất, một chút của một trường hợp sử dụng đơn giản hơn so với những gì bạn đang yêu cầu, nhưng điều này đã làm việc đáng tin cậy đối với tôi:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Dissuade web spiders from crawling the staging site 
    RewriteCond %{HTTP_HOST} ^staging\.example\.com$ 
    RewriteRule ^robots.txt$ robots-staging.txt [L] 
</IfModule> 

Bạn có thể thử để chuyển hướng các trình thu thập thông tin đến một robots.txt chính trên một máy chủ khác, nhưng một số trình thu thập thông tin có thể bị balk sau khi nhận được bất kỳ thông tin nào khác với mã trả lại "200 OK" hoặc "404 not found" từ yêu cầu HTTP và chúng có thể không đọc URL được chuyển hướng.

Đây là cách bạn sẽ làm điều đó:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Redirect web spiders to a robots.txt file elsewhere (possibly unreliable) 
    RewriteRule ^robots.txt$ http://www.example.com/robots-staging.txt [R] 
</IfModule> 
Các vấn đề liên quan