Перенаправление на URL-адрес кодирования, представленный в параметре запроса в NGINX

Я столкнулся с той же проблемой, и оказалось, что busybox требователен к формату resolv.conf. Для работы nslookup между тегом сервера имен и адресом должен быть ровно один пробел. Кроме того, /etc/nsswitch.conf должен включать DNS для хоста.

[мастер busybox (git hash 349d72c19 )sysroot -glibc -linaro -2.25 -2018.05 -arm -linux -gnueabihf ]

root@4000000a:~# cat /etc/nsswitch.conf 
passwd:    files compat
shadow:    files compat
hosts:    files dns compat 

Да, вопрос старый, но текущий busybox по-прежнему ведет себя так.

[Я использовал xxd ниже, чтобы показать количество пробелов в resolv.conf]

Это не удается:

root@4000000a:~# xxd /etc/resolv.conf
00000000: 6e61 6d65 7365 7276 6572 2020 382e 382e  nameserver  8.8.
00000010: 382e 380a                                8.8.
root@4000000a:~# nslookup  www.cnn.com 
nslookup: bad address ' 8.8.8.8'

и это работает:

root@4000000a:~# xxd /etc/resolv.conf
00000000: 6e61 6d65 7365 7276 6572 2038 2e38 2e38  nameserver 8.8.8
00000010: 2e38 0a                                 .8.
root@4000000a:~# nslookup  www.cnn.com                
Server:     8.8.8.8
Address:    8.8.8.8:53

Non-authoritative answer:
www.cnn.com canonical name = turner-tls.map.fastly.net
Name:   turner-tls.map.fastly.net
Address: 151.101.1.67
Name:   turner-tls.map.fastly.net
Address: 151.101.65.67
Name:   turner-tls.map.fastly.net
Address: 151.101.129.67
Name:   turner-tls.map.fastly.net
Address: 151.101.193.67

Non-authoritative answer:
www.cnn.com canonical name = turner-tls.map.fastly.net
Name:   turner-tls.map.fastly.net
Address: 2a04:4e42::323
Name:   turner-tls.map.fastly.net
Address: 2a04:4e42:200::323
Name:   turner-tls.map.fastly.net
Address: 2a04:4e42:400::323
Name:   turner-tls.map.fastly.net
Address: 2a04:4e42:600::323
0
07.01.2021, 11:36
1 ответ

Установите nginx и язык сценариев njs, прочитайте инструкции по установке:nginx :Пакеты Linux . Обязательно сначала сделайте резервную копию вашей конфигурации.

Минимальные шаги для установки nginxи пакета nginx-module-njsиз стабильного репозитория nginx.org в Debian в качестве примера:

echo "deb http://nginx.org/packages/debian $(lsb_release -cs) nginx" |
  sudo tee /etc/apt/sources.list.d/nginx.list

curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

sudo apt update
sudo apt install nginx nginx-module-njs
  1. Добавьте строку

    load_module modules/ngx_http_js_module.so;
    

    в основную конфигурацию(nginx.conf).

  2. Создайте файл http.jsв каталоге конфигурации nginx со следующим содержимым:

    function decoded_target_url(r) {
        return decodeURIComponent(r.args.target_url);
    }
    
    export default {decoded_target_url};
    
  3. Измените конфигурацию по умолчанию на эту:

    js_import http.js;
    js_set $decoded_target_url http.decoded_target_url;
    
    server {
        #... more stuff
    
        default_type text/html;
    
        location /redirect/ {
            return 307 $decoded_target_url;
        }
    
        #... more stuff
    }
    
  4. Запустите nginx -t, чтобы проверить конфигурацию и перезапустить сервер.

Вам необходимо добавить протокол(http://илиhttps://)в параметр запроса, например.

mylocalserver.com/redirect/?target_url=http%3A%2F%2Fexample.com%2F%3Fx%3Dy%26z%3Dk

или изменить

return 307 $decoded_target_url 

на жестко заданный

return 307 http://$decoded_target_url

или

return 307 https://$decoded_target_url

Связанные документы:

0
18.03.2021, 22:37

Теги

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