NGINX의 쿼리 매개변수에 있는 인코딩된 URL로 리디렉션

NGINX의 쿼리 매개변수에 있는 인코딩된 URL로 리디렉션

Nginx는 리디렉션 URL의 값이 encodeURIComponent.

 location /redirect/ {
             return 307 $arg_target_url;
        }

브라우저에서 URL을 입력하면:

mylocalserver.com/redirect/?target_url=example.com%3Fx%3Dy%26z%3Dk

다음으로 리디렉션됩니다.

mylocalserver.com/redirect/example.com%3Fx%3Dy%26z%3Dk

URL로 리디렉션되어야 한다고 예상됩니다 example.com?x=y&z=k.

그러나 $arg_target_url일반 값을 포함하면 작동합니다.

답변1

nginx 및 njs 스크립트 언어를 설치하려면 설치 지침을 읽으십시오.nginx: 리눅스 패키지. 먼저 구성을 백업하십시오.

Debian의 nginx.org 안정적인 저장소를 예로 들면 nginx설치를 위한 최소 단계와 소프트웨어 패키지는 다음과 같습니다.nginx-module-njs

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

관련된 문서:

관련 정보