2016-07-28 4 views
0

https에서 http로 두 번 리디렉션, 하나는 SSL을 가지고 있으며, 나는 SSL 인증을 사용하여 서버에의 nginx 내가 2 개 서버가

이처럼 config (설정)

다른 서버에서
location ~^/abc/.* { 
    proxy_pass http://www.example.com:8214/ 
} 

(이는 HTTP : // www.anotherExample.com) :

server { 
    listen 8214; 
    server_name www.anotherExample.com; 
    rewrite ^/(.*)$ http://www.anotherExample.com:8080/$1 permanent; 
} 

이후 액세스 https : //로 www.example.com/abc/api/getGroup

http : // www.anotherExample.com:8080/api/getGroup으로 리디렉션 할 수 없습니다.

뭐가 잘못 되었나요?

답변

1

구성을 개선하기 위해 수행 할 수있는 몇 가지 작업이 있습니다.

location ^~ /abc/ { 
    proxy_pass http://www.example.com:8214$uri; 
    #You should have other directives set here as well. 
} 

또한 upstream을 설정하는 것이 좋습니다. 서버 블록 그런 :

server{ 
    listen 8124; 
    server_name www.anotherExample.com; 
    rewrite ^/abc/(.*)$ http://www.anotherExample.com:8080/$1 permanent; 
} 

server{ 
    listen 8080; 
    server_name www.anotherExample.com; 

    location ^~ /api/ { 
     #your_config_here 
    } 
} 

설명 :

첫 번째 location 블록에서, 당신은 표현 .*가 없어야합니다. Nginx가 당신과 일치합니다. 그런 다음 프록시 할 때 URI를 보내도록 Nginx에 명시 적으로 알릴 수 있습니다.

다음은 /abc/을 포함하는 URI www.anotherExample.com:8124을 보내므로 모든 것을 추출하려고합니다.

마지막으로 8080 포트를 가리 키도록 다시 작성했기 때문에이를 위해 별도의 서버 블록을 정의해야합니다.

나는 당신이 달성하고자하는 것이 무엇인지 알지 못하지만 대부분의 경우 프록시 및 리디렉션이 많이 필요하지 않으므로 성능이 저하 될 수 있습니다. 고려해야 할 또 다른 고려 사항은 암호화되지 않은 정보를 anotherExample.com으로 보내는 것입니다. 다른 로컬 네트워크에 있지 않은 경우 보안 취약점이 될 수 있습니다.