Я пытаюсь сделать свой Nginx немного более сухим, поскольку он действует как обратный прокси для почти 20 серверов. Вот что я пытаюсь сделать, все имена хостов и другие вещи изменены / примеры:
map $http_host $backend {
baz.mydomain.com hostname1:8080;
foo.mydomain.com 192.168.1.10:8081;
bar.mydomain.com hostname2:1234;
ham.mydomain.com hostname2:5678;
}
server {
listen 443 ssl http2;
server_name .mydomain.com;
ssl_certificate /usr/share/nginx/certs/mydomain.com.pem;
ssl_certificate_key /usr/share/nginx/certs/mydomain.com.key;
location / {
proxy_redirect http:// https://;
proxy_pass http://$backend;
}
}
Проблема в том, что, несмотря ни на что, это всегда приведет к ошибке шлюза. Я пробовал несколько вариантов и перемещал их, используя подстановочный знак server_name и без него, используя $ host вместо $ http_host, но пока не могу заставить его работать. Я даже иду об этом правильным путем? Я бы предпочел, чтобы в моей конфигурации не было почти 20 отдельных записей виртуального сервера.
В документации по nginx нет большой помощи по использованию карты, подобной этой, и не так много в Интернете, за исключением одного действительно старого поста, в котором кратко упоминается нечто подобное: https://serverfault.com/questions/342309/how-to-write-a-dry-modular-nginx-conf-reverse-proxy-with-named-locations