Informatikum
@Informatikum
Преподаю робототехнику и информатику в школе.

Почему когда несколько сайтов на одном сервере не работает robots.txt?

Здравствуйте.

На сервере поставил Debian. Каждый сайт хранится в:
/var/www/site1.ru
/var/www/site2.ru
и т.д.

Добавил в каждую папку сайта свой robots.txt:
/var/www/site1.ru/robots.txt -> site1.ru/robots.txt
/var/www/site2.ru/robots.txt -> site2.ru/robots.txt

Выдает ошибку:
404 Not Found
nginx/1.1.14

Перелазил форумы, хабр, тостер. Находил много советов, ни один не помог. Посоветуйте, как правильно должно быть все разрулено, чтобы заработало.

То же самое с sitemap.xml...
  • Вопрос задан
  • 50087 просмотров
Решения вопроса 2
@triod
Просто у тебя не разрешено обрабатывать файлы с txt|xml . Должно бить что то типа
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|xml|txt|tar|woff|ttf)$ {
root /patch/to/static/files
}
Ответ написан
Informatikum
@Informatikum Автор вопроса
Преподаю робототехнику и информатику в школе.
Не до конца разобрался, сделал по другому. У меня в nginx был один конфиг сайта. Когда я пытался создать копию конфига для второго сайта, то получал много сообщений о дубликатах строк. Когда добавлял информацию про второй сайт в основной конфиг, все переставало работать.

Удалил все конфиги сайтов в nginx. Создал конфиг c нуля для двух сайтов и все заработало! Теперь у каждого сайта есть свой robots.txt! :D

server {

listen 80 default;

server_name site1.ru;



location / {

proxy_pass http://127.0.0.1:8080;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $http_host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}


location ~*^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {

root /var/www/site1.ru/;

}

}

server {

listen 80 default;

server_name site2.ru;



location / {

proxy_pass http://127.0.0.1:8080;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $http_host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}


location ~*^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {

root /var/www/site2.ru/;

}

}


Спасибо всем за помощь!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@triod
Если один файл стал для всех сайтов значить в каждом сайте одинаковый путь к файлу robots.txt
Ответ написан
Комментировать
Informatikum
@Informatikum Автор вопроса
Преподаю робототехнику и информатику в школе.
Спасибо, заработало. Только теперь у меня один робот.тхт для всех сайтов стал. У каждого сайта соответсвенно свой должен быть робот.тхт.

Делаю копию первого сайта в /etc/nginx/sites-enabled# и все сайты перестают работать.
Ответ написан
Informatikum
@Informatikum Автор вопроса
Преподаю робототехнику и информатику в школе.
Главный nginx.conf

user www-data;
worker_processes  4;
worker_rlimit_nofile 8192;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
  worker_connections  2048;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  access_log	/var/log/nginx/access.log;

  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;

  keepalive_timeout  65;

  gzip  on;
  gzip_http_version 1.0;
  gzip_comp_level 5;
  gzip_proxied any;
  gzip_types text/plain text/css application/x-javascript application/xhtml+xml text/xml application/xml application/xml+rss text/javascript application/javascript;
  gzip_disable "MSIE [1-6]\.";

  server_names_hash_bucket_size 128;

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}


Конфиг главного сайта и пока единственный файл. /etc/nginx/sites-enabled
Название site.ru указано как пример.

gzip_static                     on;
gzip_buffers 16 8k;

directio 4m;
max_ranges 4;

open_file_cache          max=60000 inactive=60s;
open_file_cache_valid    60s;
open_file_cache_min_uses 2;
open_file_cache_errors   on;

postpone_output 512;
reset_timedout_connection on;

sendfile_max_chunk 2M;
underscores_in_headers on;

server {
  listen   80 default_server backlog=1024 deferred ;
  root /var/www/site.ru;
  index index.php;
  server_name _ 2057.hoster.ru site.ru www.site.ru ;
  server_name_in_redirect off;
  charset utf-8;

  proxy_redirect http://127.0.0.1:8080 http://$host;

  client_max_body_size 1024m;
  client_body_buffer_size 4m;

  proxy_connect_timeout 300;
  proxy_send_timeout 300;
  proxy_read_timeout 300;
  proxy_buffer_size 64k;
  proxy_buffers 8 256k;
  proxy_busy_buffers_size 256k;
  proxy_temp_file_write_size 10m;

  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  location ~* ^.+\.(jpg|txt|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
    try_files $uri @backend;
    expires  max;
  }

  location / {
    try_files $uri @backend;
  }

  location ~ \.php$ {
    try_files  $uri @backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass http://127.0.0.1:8080;
  }

  location @backend {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass http://127.0.0.1:8080;
  }
 
  location ~ ^/server-status$ {
    proxy_pass http://127.0.0.1:8080;
  }

  location ~ ^/nginx-status$ {
    stub_status on;
    allow 127.0.0.0/24;
    deny all;
  }


  location = /favicon.ico {
    log_not_found off;
  }
   
  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }

  location ~ (/\.ht|\.git|\.svn|\.hg) {
    deny all;
  }

}


Я пробовал добавить в последний файл отдельной частью еще раз все, что есть в server и указывал другие пути. Так же пробовал создать копию этого конфига и прописать новые пути. После перезапуска nginx все сайты были недоступные.
Ответ написан
Комментировать
Informatikum
@Informatikum Автор вопроса
Преподаю робототехнику и информатику в школе.
Пробовал еще как варианты:
server {
  listen   8000 backlog=1024 deferred ;
  root /var/www/site2.ru;
----


----
  location / {
    try_files $uri @backend;
    if ($http_host ~* "^site2.ru"){
    rewrite ^/robots.txt?$ /robots.txt break;
    }
----


Не помогло...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы