Рейтинг:0

Хранилище шлюза API Nginx с поддержкой поддоменов

флаг ke

Я следую руководству по настройке прокси-сервера API, я запускаю серверные приложения для производства и разработки на одном и том же VPS.

https://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-1/

У меня есть домены, управляемые с помощью SSL через certbot на обоих live.домен.com и dev.domain.com

Я застрял на "Определение API хранилища" Проблема в том, что объясненная маршрутизация основана на местоположении URL-адреса, она не объясняет, как обрабатывать субдомен, настроенный поверх него.

У меня есть установка: api_gateway

включить api_backends.conf;
включить api_keys.conf;

сервер {
    access_log /var/log/nginx/api_live.log основной; # Каждый API может также регистрироваться в 
                                                   # отдельный файл

    слушать 443 ssl;
    имя_сервера live.domain.com;

    # Конфигурация TLS
    ssl_certificate /etc/letsencrypt/live/live.domain.com/fullchain.pem; # под управлением Certbot
    ssl_certificate_key /etc/letsencrypt/live/live.domain.com/privkey.pem; # под управлением Certbot
    включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
    ssl_session_cache общий: SSL: 10 м;
    ssl_session_timeout 5 м;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_protocols TLSv1.2 TLSv1.3;

    # определения API, по одному на файл
    включить api_conf.d/*.conf;

    # ответы об ошибках
    error_page 404 = @400; # Рассматривать неверные пути как неверные запросы
    proxy_intercept_errors включен; # Не отправлять ошибки бэкенда клиенту
    включить api_json_errors.conf; # Ошибки JSON, удобные для клиента API
    приложение по умолчанию_тип/json; # Если нет типа содержимого, предположим, что это JSON
}
# *повторяется для dev.domain.com*

API_backends

вверх по течению в прямом эфире {
зона live_service 64k;
сервер 127.0.0.1:4000
}
вышестоящий разработчик {
зона dev_service 64k;
сервер 127.0.0.1:2000
}

В любом случае я могу управлять этим со следующим:

место расположения / {
    # Конфигурация политики здесь (аутентификация, ограничение скорости, ведение журнала...)
    #
    access_log /var/log/nginx/warehouse_api.log основной;

    # URI-маршрутизация
    #
# если поддомен активен
    место расположения / {
        прокси_пасс http://живой;
    }
# иначе, если субдомен dev
    место расположения / {
        прокси_пароль http://dev;
    }

    вернуть 404; # Универсальный
}

возможно, я смогу использовать этот фрагмент, который я нашел.

    если ($ host = live.domain.com) {
        вернуть 301 https://$host$request_uri;
    } # управляется Certbot

Это возможно?

    если ($ host = live.domain.com){
        расположение /API {
                прокси_пасс http://live/api;
        }
# И/ИЛИ
        местоположение /документы/ {
                прокси_пасс https://live$request_uri
        }
    }
Рейтинг:1
флаг za

В вашей конфигурации все почти нормально, за исключением того, что вы обманули себя с этими включениями и место расположения / {} блоков, не включая вторую часть конфигурации vhost.

Вам просто нужно поставить live.домен.com и dev.domain.com место расположения / {} блоки в соответствующем сервер {} блоки и все (один содержащий прокси_пасс http://живой; в живую и так далее).

Не используйте если () {} блоки в это время, вам это не нужно.

И да, вам как бы не хватает не-TLS сервер {} блоков, но это уже другой вопрос.

флаг ke
Вы хотите сказать, что я добавляю proxy_pass в блок сервера в «api_gateway» и удаляю «warehouse_api.conf»?
флаг ke
Методом проб и ошибок разобрался! к сожалению, нет «всех» путей, поэтому я проложил путь к API и путь к документу в соответствии с моими местоположениями в блоке сервера, я хочу продолжать изучать Nginx, чтобы в будущем я мог делать это лучше. спасибо за подсказки.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.