Базовый URI обратного прокси-сервера Nginx для изменения порта

Базовый URI обратного прокси-сервера Nginx для изменения порта

Привет, я хочу использовать обратный прокси-сервер, например, мой базовый порт Nginx.

http://example.com:443/ips/8443 -> http://example.com:8443/ips/8443
http://example.com:443/ips/23950 -> http://example.com:23950/ips/23950

Если бы он это поддерживал, было бы намного лучше, но это не обязательно.

http://example.com:443/ips/23950/xyz -> http://example.com:23950/ips/23950/xyz

А это мой конфиг

    location ~ /ips/([0-9]+)(/|)(\S+|)$ {
            proxy_pass http://127.0.0.1:$1/$3;
    }

Я не совсем понимаю REGEX в nginx, но могу сказать, что я старался изо всех сил

решение1

Чтобы исправить эту проблему, вам нужно будет обновить директиву proxy_pass, включив полный путь URL в проксируемый запрос. Это можно сделать с помощью переменной $request_uri, которая содержит полный путь URL входящего запроса.

Вот пример того, как может выглядеть обновленная директива proxy_pass:

proxy_pass http://127.0.0.1:$1$request_uri;

Это передаст запрос на локальный порт вместе с полным URL-путем входящего запроса. Таким образом, запрос на /ips/23950/xyz будет проксирован наhttp://127.0.0.1:23950/xyz, что должно позволить локальному серверу правильно обработать запрос.

Также стоит отметить, что блок location, содержащий директиву proxy_pass, должен быть единственным блоком внутри блока location /ips. Это связано с тем, что блоки location обрабатываются по порядку, а оператор return 404 во внешнем блоке location не позволит обрабатывать любые запросы, соответствующие внутреннему блоку location. Поэтому вам нужно будет переместить оператор return 404 внутрь блока location, который сопоставляет URL-адреса с номерами портов, и изменить его на return 403 или какой-либо другой код ошибки, указывающий на то, что запрошенный URL-адрес недопустим.

Вот пример того, как может выглядеть обновленная конфигурация:

location ~ ^/ips/([0-9]+) {
    proxy_redirect off;
    proxy_pass http://127.0.0.1:$1$request_uri;
    proxy_http_version 1.1;
   

Связанный контент