Как Nginx может добавить субдомен в качестве параметра при выполнении proxy_pass для Tomcat

Чего я пытаюсь достичь
Веб-приложение должно иметь возможность поддерживать несколько поддоменов без необходимости вносить какие-либо изменения в nginx или tomcat каждый раз, когда используется новый поддомен. (Я уже внес необходимые изменения в DNS для поддержки субдоменов с подстановочными знаками)

Nginx прослушивает порт 80. Он выполняет proxy_pass для tomcat через порт 8080. Nginx должен иметь возможность поддерживать несколько поддоменов.

Мои текущие настройки основаны на этом ответе. Но он не передает параметр
Nginx proxy_pass : можно ли добавить статический параметр к URL-адресу?

Все возможные поддомены
dynamic_subdomain_1.localhost
dynamic_subdomain_2.localhost

настройка nginx

server {
    listen 80 default_server;

    server_name ~^(?<subdomain>.+)\.localhost$;

    location / {
        set $args ?$args&site=$subdomain;
        proxy_pass http://127.0.0.1:8080;
    }
}

Nginx должен добавить поддомен в качестве параметра при вызове Tomcat.

Вызовы Tomcat должны быть следующими для каждого поддомена

http://127.0.0.1:8080?site=dynamic_subdomain_1
http://127.0.0.1:8080?site=dynamic_subdomain_2

Я пробовал вышеуказанную настройку, но параметр запроса всегда отображается как нулевой.

Что мне нужно изменить в nginx, чтобы это стало возможным?


person kensen john    schedule 31.03.2014    source источник


Ответы (1)


Ответ немного проще. Просто получите подстроку с поддоменом и используйте ее как параметр для proxy_pass:

server {                                                         
  # this matches every subdomain of domain.
  server_name .domain;                                           

  location / {                                                   
    set $new_request_uri "";                                     
    set $subdomain "";

    if ($host ~* "^(.+)\.domain$") {                             
      set $subdomain $1;                                         
      # lets assume there are args...
      set $new_request_uri "$request_uri&subdomain=$subdomain";  
    }                                                            
    # if there are no args add a question mark and the subdomain argument
    if ($args = '') {                                            
      set $new_request_uri "$request_uri?subdomain=$subdomain";  
    }                                                            

    proxy_pass http://127.0.0.1:8080$new_request_uri;              
  }                                                              
} 

Я рассмотрел запрос с аргументами или без них. Я думаю, что это решает вашу проблему.

Альфредо

person alfredocambera    schedule 01.04.2014