Назад | Перейти на главную страницу

Возможен ли nginx proxy_pass с гибким подпутьем?

в настоящее время у меня это как мой proxy_pass который отлично работает

    location = /sms/resetpass {
             proxy_pass http://xxx.xxx.xxx.xxx/api/resetpass;
             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;
    }

приведенное выше работает нормально, но я подумал, нужен ли мне другой прокси, например

    location = /sms/sample1 {
             proxy_pass http://xxx.xxx.xxx.xxx/api/sample1;
             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;
    }

тогда я должен сделать еще один location block

можно ли сделать что-то подобное?

    location = /sms/something_here {
             proxy_pass http://xxx.xxx.xxx.xxx/api/something_here;
             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;
    }

где something_here означает, что если я передам какой-либо URL в sms/blah затем proxy_pass было бы api/blah

Я пробовал погуглить что-то вроде proxy_pass with subpath или что-то в этом роде, но, похоже, это не то, что мне нужно. Так что мне интересно, возможно ли это, или я просто не знал правильного слова, чтобы это найти?

Заранее благодарим за любые советы.

Используйте nginx location и rewrite директивы, вроде этого должно быть хорошо:

location ~ ^/sms/ {
    rewrite ^/sms/(.*) /api/$1 break;
    proxy_pass http://1.2.3.4;
    ...
}

не забудьте сначала проверить это.