Я пытаюсь установить robots.txt
для всех виртуальных хостов под http сервером nginx. Я смог сделать это в Apache, поместив в основной httpd.conf
:
<Location "/robots.txt">
SetHandler None
</Location>
Alias /robots.txt /var/www/html/robots.txt
Я попытался сделать что-то подобное с nginx, добавив приведенные ниже строки (a) в nginx.conf и (b) как include conf.d / robots.conf
location ^~ /robots.txt {
alias /var/www/html/robots.txt;
}
Я пробовал с '=' и даже поместил его на один из виртуальных хостов, чтобы проверить это. Казалось, ничего не работает.
Что мне здесь не хватает? Есть ли другой способ добиться этого?
Вы можете установить содержимое файла robots.txt прямо в конфигурации nginx:
location = /robots.txt { return 200 "User-agent: *\nDisallow: /\n"; }
Также можно добавить правильный Content-Type:
location = /robots.txt {
add_header Content-Type text/plain;
return 200 "User-agent: *\nDisallow: /\n";
}
Есть ли другие правила, которые определены? Возможно, включен common.conf или другой файл conf, который имеет приоритет над вашей конфигурацией. Одно из следующих определенно должно работать.
location /robots.txt { alias /home/www/html/robots.txt; }
location /robots.txt { root /home/www/html/; }
местоположение нельзя использовать внутри http
блок. nginx не имеет глобальных псевдонимов (т.е. псевдонимов, которые могут быть определены для всех vhosts). Сохраните свои глобальные определения в папке и включите их.
server {
listen 80;
root /var/www/html;
include /etc/nginx/global.d/*.conf;
}
Вы также можете просто передать файл robots.txt напрямую:
location /robots.txt {
return 200 "User-agent: *\nDisallow: /\n"
}
У меня была такая же проблема с вызовами acme, но тот же принцип применим и к вашему случаю.
Чтобы решить эту проблему, я переместил все свои сайты на нестандартный порт, который я выбрал 8081
и создал виртуальный сервер, прослушивающий порт 80. Он передает все запросы на 127.0.0.1:8081
, кроме хорошо известных. Это действует почти как глобальный псевдоним с одним дополнительным прыжком, но это не должно вызывать значительного падения производительности из-за асинхронной природы 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;
}
}