Обрабатывать поддомен в nginx, работающем на основе Docker ElasticBeanstalk - PullRequest
0 голосов
/ 30 мая 2019

У меня есть сценарий, состоящий из контейнеров Docker внешнего и внутреннего интерфейсов и другого контейнера для обратного прокси-сервера nginx.

В настоящее время конфигурация nginx указывает URL http://example.com на внешний контейнер и http://example.com/backend на внутренний контейнер.

Теперь мне нужно настроить nginx, чтобы он мог также распознавать вызовы http://backend.example.com и перенаправлять их в бэкэнд-контейнер.

Как мне добиться этого, если имя сервера, которое используется в конфигурации nginx, является localhost?

server {
    listen       80 default_server;
    server_name  localhost;

    if ($http_x_forwarded_proto = 'http') { 
        return 301 https://$host$request_uri; 
    }

    location /backend/ {
        proxy_pass   http://backend:3000/;
    }

    location / {
        proxy_pass   http://frontend:3000/;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Я тоже пытался добавить этот блок, но он не работал (на самом деле все перестало работать):

server {
    listen       80 default_server;
    server_name  backend.localhost;

    if ($http_x_forwarded_proto = 'http') { 
        return 301 https://$host$request_uri; 
    }

    location / {
        proxy_pass   http://backend:3000/;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

1 Ответ

0 голосов
/ 03 июня 2019

Я создаю тестовую среду. Добавьте xyz.com и backend.xyz.com в мой файл "hosts". Это работает для меня

server {
    listen       80;
    server_name  xyz.com;

    location /backend/ {
        proxy_pass   http://backend:8081/;
    }

    location / {
        proxy_pass   http://frontend:8082/;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

server {
    listen       80;
    server_name  backend.xyz.com;

    location / {
        proxy_pass   http://backend:8081/;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
...