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

Поддомены пользователей Nginx, должен ли я использовать proxy_pass?

Я пытаюсь настроить поддомены пользователей, обслуживая контент из определенных папок: www.example.com/username служил от username.example.com (как и страницы на github).

Я смотрел перезаписи Nginx, но я не хочу, чтобы браузер перенаправлял - я хочу, чтобы домен был username.example.com. Во всяком случае, комментарий к этот вопрос говорит, что я не могу переписать хост, только прокси к нему. Я пытался настроить proxy_pass, но вся документация и примеры показывают, что он используется для (очевидно) прокси-сервера для службы на другом хосте или порту, но в моем случае я хочу просто прокси-сервер в другое место на том же хосте и порту.

Является ли это подходящим способом решения этой проблемы, и если да, то каков правильный синтаксис конфигурации Nginx?

Самый простой способ справиться с этим - заставить nginx обрабатывать каждый из каталогов как отдельный виртуальный хост.

server_name _;
root /var/www/$host;

Это потребует, чтобы физический путь к файлам был /var/www/username.example.com/ вместо того /var/www/username/.

Для справки, это то, что я поместил в свою конфигурацию сайта nginx. Обратите внимание, что я сопоставляю субдомен и устанавливаю корень из него, а не из $host как в ответе Шейна, поэтому я могу использовать / var / www / username на диске. Кроме того, все пользователи делятся stylesheets и javascripts папки.

server_name _;

set $myroot "";
if ($host ~ (.*)\.example\.com) {
          set $myroot $1;
}
if ($host ~ ^www\.example\.com) {
  set $myroot "";
}

location / {
  root   /var/www/$myroot;
  index  index.html index.htm;
  autoindex on;
}

location ~ ^(/stylesheets|/javascripts) {
  root /var/www;
}