Итак, я использую Nginx в качестве обратного прокси, и моя текущая конфигурация стала очень длинной, так как у меня около 12 поддоменов, и это число будет продолжать расти. Я ищу способ очистить свою конфигурацию, и я думаю, что нашел способ, но не могу заставить его работать. Вот что я пытаюсь:
server {
server_name ~^(.+)\.domain\.com$;
ssl on;
location ~ domain1 {
proxy_pass http://192.168.1.50:4040/;
}
location ~ domain2 {
proxy_pass http://192.168.1.60:4040/;
}
}
Но это дает мне ошибку, в которой говорится
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except"
И я понимаю, о чем он говорит, но не знаю, как это решить. Если я уберу косую черту в конце proxy_pass
директивы, Nginx запустится без ошибок, но ни один из поддоменов не будет работать.
Правильно ли я поступаю? Есть ли способ лучше?
Заранее спасибо!
Как упоминалось в комментариях, лучший способ (самый читаемый и самый быстрый) - вручную настроить каждый домен. Это связано с тем, что NGINX создает статические объекты в памяти, чтобы избежать обработки каждого запроса во время выполнения.
Однако, если вы действительно хотите это сделать (proxy_pass в разные места для разных поддоменов), вы можете сделать это:
Например.
map $http_host $my_upstream {
default http://192.168.1.1:8080;
domain1.* http://172.0.0.1:8081;
domain2.* http://10.0.0.1:80802;
}
server {
server_name ~(.+)\.domain\.com;
location / {
proxy_pass $my_upstream;
}
}
Обратите внимание, что map
должно быть вне серверный блок