Привет, я хочу использовать обратный прокси-сервер, например, мой базовый порт 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;