Как настроить nginx для предоставления нескольких сервисов на Jelastic? - PullRequest
1 голос
/ 06 октября 2019

Через инструментальную панель Jelastic я создал это:

enter image description here

Я просто нажал «Новая среда», затем я выбрал nodejs. Я добавил образ докера (из mailhog).

Теперь я хотел бы, чтобы порт 80 моей среды обслуживал приложение nodejs. Это по умолчанию так. Поэтому делать нечего.

В дополнение к этому, я хотел бы, чтобы порт 8080 (или любой другой порт, кроме 80, например, порт 5000) моей среды обслуживал mailhog, размещенный на образе докера. Для этого я добавил следующие строки в nginx-jelastic.conf (сразу после первого сервера, обслуживающего приложение nodejs):

server {
                listen *:8080;
                listen [::]:8080;
                server_name  _;

                 location / {
                        proxy_pass http://mailhog_upstream;
                }
        }

, где я также определил mailhog_upstream следующим образом:

upstream mailhog_upstream{
server 10.102.8.215;   ### DEFUPPROTO for common ###
    sticky path=/; keepalive 100;
}

Если я сейчас просматриваю порт 8080 моей среды, то вижу ... приложение nodejs. Если я попробую любой другой порт, кроме 80 или 8080, я ничего не вижу. Ввод другого server_name не помогает. Я попробовал несколько вещей, но ничего не получается. Почему это? Что я здесь не так делаю?

Затем я попытался избавиться от вышеуказанного mailhog_upstream и вместо этого написать

server {
    listen       *:5000;
    listen       [::]:5000;
    server_name  _;

    location / {
        proxy_pass http://10.102.8.215;
    }
}

Просмотр порта 5000 среды также не работает.

Если я заменим IP-адрес приложения nodejs на мой сервис mailhog, то mailhog будет работать на порту 80. Я не понимаю, как заставить приложение nodejs работать на порту 80 и сервис mailhogна порт 5000 (или любой другой порт, кроме 80).

Может ли кто-нибудь просветить меня, пожалуйста?

После всех этих неудач я попробовал другой анзац. Предположим, что мой env путь example.com/. То, что я пробовал выше, это заставить mailhog работать при вызове example.com:5000, чего я не смог сделатьЗатем я попытался сделать почтовый ящик доступным через example.com/mailhog. Чтобы сделать это, я избавился от всех своих модификаций, указанных выше, и завершил текущий сервер в nginx-jelastic.conf с

location /mailhog {
                    proxy_pass http://10.102.8.96:8025/;
                    add_header Set-Cookie "SRVGROUP=$group; path=/";
                }

. Это работает в том смысле, что если я знаю, просмотрите example.com/mailhog, то я получучто-то на странице, но не совсем то, что я хочу: это страница mailhog без какого-либо стиля. Кроме того, когда я вызываю API mailhog через example.com/mailhog/api/v2/messages, я получаю успешный ответ без тела, когда я должен был получить

{"total":0,"count":0,"start":0,"items":[]}

Что я делаю не так в этот раз?

Править

Чтобы быть более точным, я поместил следующий манифест , который демонстрирует вторую проблему с расположением nginx.

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Полный список местоположений для вашего случая следующий: (пожалуйста, обратите внимание на URI в восходящих потоках, они разные)

location /mailhog { proxy_pass http://172.25.2.128:8025/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "    upgrade"; }
location /mailhog/api { proxy_pass http://172.25.2.128:8025/api; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "    upgrade"; }

location /css { proxy_pass http://172.25.2.128:8025; }
location /js { proxy_pass http://172.25.2.128:8025; }
location /images { proxy_pass http://172.25.2.128:8025; }

, который работает для меня с вашим приложением

# curl 172.25.2.127/mailhog/api/v2/messages
{"total":0,"count":0,"start":0,"items":[]}
0 голосов
/ 06 октября 2019

По умолчанию открыты следующие порты: 80, 8080, 8686, 8443, 4848, 4949, 7979.

Дополнительные порты можно открыть с помощью:

  • конечные точки - сопоставляет внутренний порт контейнера со случайным внешним через Jelastic Shared LB
  • Public IP - обеспечивает прямой доступ ко всем портам вашего контейнера

Подробнее в следующей статье: " Конфигурация контейнера - Порты ". Это также может быть полезно: " Публичный IP-адрес против общего балансировщика нагрузки "

...