У меня много псевдонимов серверов в конфигурации nginx:
server {
listen 80;
server_name example.com site1.example.com site2.example.com site3.example.com
...
Как я могу контролировать конкретную папку для псевдонима в местоположении файла robots.txt, например, я имею в виду:
location ^~ $http_host/robots.txt {
alias /home/web/public_html/static/$http_host/robots.txt;
}
Строительство выше не работает.
Ты можешь использовать $host
переменная nginx:
location /robots.txt {
alias /home/web/public_html/static/$host/robots.txt;
}
Или:
location /robots.txt {
root /home/web/public_html/static/$host;
}
По умолчанию $host
означает: в следующем порядке приоритета: имя хоста из строки запроса или имя хоста из поля заголовка запроса «Хост», или имя сервера, соответствующее запросу.
Не знаю, возможно ли это. Если это кто-то даст другой ответ.
Другой подход - создать серверный блок для каждого сайта с любыми настраиваемыми местоположениями, а затем включить любые общие директивы в общую папку. Что-то вроде этого
example1.conf
server {
listen 80;
server_name site1.example.com;
include common1.conf;
location ^~ robots.txt {
alias /home/web/public_html/static/example1/robots.txt;
}
}
example2.conf
server {
listen 80;
server_name site2.example.com;
include common1.conf;
location /abcd {
//whatever
}
location ^~ robots.txt {
alias /home/web/public_html/static/example2/robots.txt;
}
}
common1.conf
location /common/location {
//whatever
}
У вас проблема с вашим location
заявление. Он соответствует только нормализованному URI, отправленному от пользователя, то есть части после имени домена и, возможно, порта в URL-адресе и перед аргументами запроса.
Кроме того, вы не указываете фактическое имя файла в alias
директива, просто путь, где найти файл.
Поэтому вам нужно использовать:
location /robots.txt {
alias /home/web/public_html/static/example1;
}
в вашей конфигурации.