59 lines
2.5 KiB
Markdown
59 lines
2.5 KiB
Markdown
---
|
||
status: seed
|
||
type: guide
|
||
tags:
|
||
- admin
|
||
- nginx
|
||
- reverse-proxy
|
||
- homelab
|
||
created: 2026-05-18
|
||
updated: 2026-05-18
|
||
source: '[[Лайфхак для NPM. Как проксировать не на поддомен а на под путь]]'
|
||
aliases:
|
||
- Nginx Proxy Manager под path
|
||
---
|
||
# Nginx Proxy Manager под path
|
||
|
||
Кейс: сервис нужно опубликовать не на отдельном поддомене вида `service.domain.ru`, а в подкаталоге основного домена: `domain.ru/<path>`.
|
||
|
||
## Решение
|
||
|
||
В Nginx Proxy Manager нужно добавить `location` для нужного маршрута и в дополнительных настройках срезать prefix перед проксированием:
|
||
|
||
```nginx
|
||
rewrite ^/<path>/?(.*)$ /$1 break;
|
||
```
|
||
|
||
Смысл правила:
|
||
|
||
- пользователь открывает `domain.ru/<path>/...`;
|
||
- Nginx убирает `/<path>` из URI;
|
||
- upstream получает путь так, будто сервис открыт в корне `/`.
|
||
|
||
## Когда это нужно
|
||
|
||
Подход полезен, если:
|
||
|
||
- не хочется заводить отдельный поддомен под мелкий сервис;
|
||
- сервис живет за reverse proxy в homelab;
|
||
- внешний URL должен быть компактным;
|
||
- нужно спрятать несколько внутренних сервисов за одним доменом.
|
||
|
||
## Ограничения
|
||
|
||
Не каждый сервис нормально работает под path-prefix. Возможные проблемы:
|
||
|
||
- абсолютные ссылки на `/assets`, `/api`, `/static`;
|
||
- WebSocket-маршруты;
|
||
- OAuth/callback URL;
|
||
- hardcoded base URL внутри приложения;
|
||
- редиректы на `/`, из-за которых пользователь выпадает из `/<path>`.
|
||
|
||
Если приложение поддерживает настройку base path/base URL, лучше указать ее явно. Rewrite в proxy — рабочий хак, но не полноценная замена поддержке subpath внутри приложения.
|
||
|
||
## Связанные заметки
|
||
|
||
- [[Infrastructure — ada-dev]] — где NPM используется как публичный и локальный reverse proxy.
|
||
- [[CA и NGINX]] — TLS и базовая настройка Nginx.
|
||
- [[Docker - Дополнительные знания]] — эксплуатация сервисов в контейнерах.
|