Недавно я установил сервер Ubuntu (18.04) для размещения нескольких внутренних приложений nodejs. Все приложения находятся на поддоменах (v1.example.com
, v2.example.com
) моего основного домена, но на разных портах. Приложения обслуживаются с помощью express (так как они также выступают в качестве API).
Что я хочу сделать, так это, основываясь на поддомене, перенаправить мой трафик на определенное приложение NodeJS (с контекстом). Вот мой текущий конфиг nginx:
server {
listen 80;
listen [::]:80;
server_name v1.example.com www.v1.example.com;
location / {
proxy_pass http://localhost:3000/v1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 80;
listen [::]:80;
server_name v2.example.com www.v2.example.com;
location / {
proxy_pass http://localhost:3001/v2;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Он работает, если я использую этот конфиг:
server {
listen 80;
listen [::]:80;
server_name v1.example.com www.v1.example.com;
location /v1 {
proxy_pass http://localhost:3000/v1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Однако пользователю нужно получить доступ к v1.example.com/v1
.
Что именно я хочу, так это получить доступ к v1.example.com
и обслуживаться моим node приложением http://localhost:3000/v1
без изменения URL. Возможно ли это?
Это должно работать, если вы измените
location /v1 {
на:
location / {
Но оставьте:
proxy_pass http://localhost:3000/v1;
Как есть.
В зависимости от того, как вы хотите, чтобы другие URL-адреса выглядели в серверной части, вам может понадобиться регулярное выражение, которое соответствует пути в браузере и добавляет его к пути в запросе проксируемого локального хоста. Здесь уже есть вопрос о том, как это сделать: https://unix.stackexchange.com/questions/199599/nginx-location-regex-with-proxypass