Назад | Перейти на главную страницу

Nginx: используйте $ http_host в location

У меня много псевдонимов серверов в конфигурации 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;
}

в вашей конфигурации.