nginx reverse nodejs apps with context

Недавно я установил сервер 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. Возможно ли это?

0
задан 19 December 2020 в 00:48
1 ответ

Это должно работать, если вы измените

location /v1 {

на:

location / {

Но оставьте:

proxy_pass http://localhost:3000/v1;

Как есть.

В зависимости от того, как вы хотите, чтобы другие URL-адреса выглядели в серверной части, вам может понадобиться регулярное выражение, которое соответствует пути в браузере и добавляет его к пути в запросе проксируемого локального хоста. Здесь уже есть вопрос о том, как это сделать: https://unix.stackexchange.com/questions/199599/nginx-location-regex-with-proxypass

0
ответ дан 19 December 2020 в 11:57

Теги

Похожие вопросы