2016-04-25 4 views
1

если есть субдомен на моем Nginx конфигурации веб-сервера: sub.mydomain.comПерепишите субдомен к серверной прокси-ти Nginx

и у меня есть сервер бэкэнда, который прослушивает порт 5000: http://127.0.0.1:5000

является его можно передать все вызовы поддомена на бэкэнд?

как: https://sub.mydomain.com/list к http://127.0.0.1:5000/sub/list

Это должно работать со всеми методами: POST, PUT, GET, DELETE

UPDATE:

, когда я называю мой сервер: https://mysubdomain.mydomain.com

со следующей конфигурацией:

upstream http_backend { 
    server 127.0.0.1:5000; 
} 

server_name ~^(?<subdomain>[^.]+)\.mydomain\.com; 

Это не работает (ошибка: 404):

location/{ 
    proxy_pass http://http_backend/$subdomain/; 

    proxy_redirect off; 
    proxy_set_header Host   $host; 
    proxy_set_header X-Real-IP  $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto https; 
} 

Это прекрасно работает:

location/{ 
    proxy_pass http://http_backend/mysubdomain/; 

    proxy_redirect off; 
    proxy_set_header Host   $host; 
    proxy_set_header X-Real-IP  $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto https; 
} 

Когда я войти в переменную $ поддомена в access_log, это кажется правильным. nginx version: nginx/1.9.15

ответ

0

Чтобы передать все поддомены, необходимо установить его в имени сервера, поставив точку перед доменом.

server_name .mydomain.com;

0

Да, вы можете использовать переменные в proxy_pass. И вы можете извлечь часть домена, используя имя сервера regexp.

server { 
    server_name ~^(?<sub>[^.]+)\.example\.com; 
    # now subdomain of example.com placed to $sub 
    # please, note, this rule do not work for http://example.com 
    location/{ 
     proxy_pass http://127.0.0.1:5000/$sub/; 
     # Path part of proxy_par URI will replace path 
     # part of location directive (so/-> /$sub/, /xxxx/ -> /$sub/xxxx/) 
    } 
} 

Вот и все :)

0

кажется Nginx не добавляет $ URI к proxy_pass если я использовать переменную $ поддомена.

Следующее решение работает:

location/{ 
    proxy_pass http://http_backend/$subdomain/$uri; 
    proxy_redirect off; 
    proxy_set_header Host   $host; 
    proxy_set_header X-Real-IP  $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto https; 
} 
Смежные вопросы