Рейтинг:0

Перенаправление на внешний актив nginx

флаг pk

Моя цель — иметь один nginx, который может передавать proxy_pass на другой сервер.

Желаемый ввод

https://example.com/https://assets1.com/image.jpg?utm=что угодно

Желаемый результат
https://assets1.com/image.jpg?utm=что угодно

Здесь мой блок местоположения

сервер {

    индекс index.html index.htm index.nginx-debian.html;
    имя_сервера example.com www.example.com;

    расположение ~/(.*) {
            если ($ request_method = 'ПОЛУЧИТЬ') {
                    add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User->
    }
    proxy_pass https://$1$is_args$args/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Хост "www.example.com";
}
слушать 80;
слушать [::]:442 ssl ipv6only=on;
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot

}

И ошибка, которую я получаю:

21.09.2021 09:27:32 [ошибка] 8475#8475: *16 неверный порт в апстриме "https:/assets1.com/image.jpg?utm=что угодно", клиент: [IP], сервер: domain.com, запрос: "GET /https://assets1.com/image.jpg?utm=любой HTTP/1.1", хост: "example.com"

Michael Hampton avatar
флаг cz
Этот блок `location` не соответствует записи в журнале ошибок, которую вы опубликовали. Опубликуйте фактическое состояние вашей _complete_ конфигурации nginx, используя `nginx -T`.
Imnl avatar
флаг pk
Добавлен полный конфиг сервера
Рейтинг:0
флаг us

Исходный URL-адрес запроса содержит префикс протокола: https://example.com/https://assets1.com.

Твой место расположения блок захватывает часть после первой /, так $1 становится https://assets1.com.

В вашей proxy_pass заявление у вас есть https://$1$is_args$args, который становится https://https://assets1.com когда переменная расширяется.

nginx пытается парсить https://assets1.com в виде пары домен:порт, поэтому доменная часть URL-адреса https а порт - пустая строка.

Для решения проблемы предлагаю следующую конфигурацию:

расположение ~^/https://(.+)$ {
    proxy_pass https://$1$is_args$args;
    ...
}

Таким образом, мы исключаем захват части протокола в $1, чтобы у нас был правильный URL-адрес. Я также добавил начальную и конечную привязки, чтобы сделать регулярное выражение более надежным.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.