2016-01-16 2 views
0

У меня есть одностраничное веб-приложение, которое принимает параметр строки запроса, name. В настоящее время это веб-приложение печатает значение параметра; поэтому на странице http://example.com/app/?name=person1 отображается текст person1.nginx - Субдомен как параметр querystring?

Я хотел бы использовать nginx для внутренних запросов маршрута до http://person1.example.com/ до http://example.com/app/?name=person1, чтобы получить тот же текст.

В идеале, я хотел бы также указать имя субдомена, доступного либо для процесса PHP, либо для процесса Node.js, чтобы повторно использовать одни и те же файлы приложений в разных поддоменах, позволяя самому приложению обрабатывать запросы на основе какой бы URL-адрес клиент не просматривал.

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

Можно ли это сделать с помощью динамических виртуальных хостов на nginx, и если да, то как? Может ли кто-нибудь указать мне в правильном направлении или помочь объяснить, что я пытаюсь понять?

Кроме того, есть ли лучшая альтернатива тому, что я пытаюсь сделать?

+0

Все ли это происходит на одном сервере? –

+0

@ColeTierney Я должен был указать - да, я хотел бы запустить nginx вместе с PHP-FPM или Node.js на том же компьютере и выполнить это. Каким-то образом. Я просто не знаю, как я к этому подхожу. – Connor

ответ

1

Если внешний редирект в порядке, я хотел бы попробовать что-то вроде следующего:

map $host $subdomain { 
    ~^(?<sub>.+)\.[^\.]+\.[^\.]+$ $sub; 
} 

server { 
    listen 80 default_server; 
    server_name _; 

    if ($subdomain) { 
     return 301 http://example.com/app/?name=$subdomain; 
    } 
} 

Если требуется внутренняя переадресация, перезапись или proxy_pass может быть необходимым.

+0

Это выглядит многообещающе! Что такое «карта», и что там происходит? В этом регулярном выражении есть некоторые вещи, которые я не могу сделать головами или хвостами, например, '' 'бит вперед. – Connor

+0

Директива 'map' - эффективное место для использования регулярного выражения для определения переменной. Автор, Игорь Сысоев, объясняет, почему [здесь] (https://www.youtube.com/watch?v=YWRYbLKsS0I). Выражение '' захватывает поддомен, если присутствует в переменной $ host, и возвращает его как переменную '$ subdomain'. Регулярное выражение может быть записано как '~^(? . +) \. Example \ .com $'. –

+0

Ack! Я попал в школу и забыл принять ваш ответ. Мои извинения и еще раз спасибо за помощь! Я понятия не имел, что такое «карта», но это было очень полезно. – Connor

Смежные вопросы