Я следую руководству по настройке прокси-сервера 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
}
}