2014-02-11 2 views
1

우분투 서버에서 여러 웹 사이트를 호스팅하기 위해 nginx를 사용하고 있습니다. 기본적으로 내 설정은 다음과 같습니다.Nginx 비 HTTPS 웹 사이트가 다른 HTTPS 웹 사이트로 리디렉션

내 첫 번째 도메인 example1.com (SSL 사용)은 http://example1.comhttps://example1.com에서 액세스 할 수 있습니다. 잘 작동합니다.

하지만 제 2 차 도메인 example2.com, 나는 SSL이 사용하지 않습니다 -하지만 난 https://example2.com를 입력 할 때 URL이 첫 번째 도메인 https://example1.com로 리디렉션 - 지금 현재 내가이 서버 블록을 추가 한

잘못 URL에 https://을 입력하면 same domainhttp://으로 다시 리디렉션됩니다. 그러나 이것이이 문제를 다루는 올바른 방법은 아닙니다. 누구보다 좋은 아이디어가 있습니까?

server { 
    listen 443 ssl; 
    server_name example2.com www.example2.com; 
    rewrite^ http://$server_name$request_uri? permanent; 
} 

답변

1

문제는 여기에 당신은 단지 하나의 IP 주소 (서버 측)를 사용하고 TLS Server Name Indication 확장 (클라이언트 측)에 의존하고 있다는 점이다. Nginx는 요청을 처리하는 데 사용할 수있는 것이 없으면 항상 기본 HTTPS 서버를 사용합니다.

당신의 솔루션은 나에게 딱 맞는 것처럼 보이지만, 유효한 인증서가 없다면 클라이언트 측에서 오류가 발생합니다. 유일한 다른 가능성은 단순히 연결 시도를 삭제하는 기본 유효하지 않은 HTTPS 서버를 만드는 것입니다. 그러나 나는 그것이 당신이 원하는 것이 아니라고 생각합니다.

server { 
    listen  443 ssl; 
    server_name example2.com *.example2.com; 
    return  301 http://$server_name$request_uri; 
} 

이때 리디렉션하는 경우 항상 return을 사용하십시오.

내가 말했듯이
server { 
    listen    443 ssl; 
    server_name   _; 
    ssl_certificate  blank.crt; 
    ssl_certificate_key blank.key; 
    return    403; 
} 

, 단순히 제출 된 헤더 또는 경우에 유효한 HTTP 호스트를 포함하지 않는 모든 연결 시도를 삭제합니다 : 모든 구성은 다음과 같은 것이 같을 수

기본 무효 캐치 제출 된 HTTP 호스트가 유효하지 않습니다.

+0

제안 해 주셔서 감사합니다. – randika

+0

샘플 공백 캐치 모든 구성을 추가했습니다. 그러나 나는 당신이 그것을 원하거나 필요로하지 않는다고 생각합니다. – Fleshgrinder

+0

아무것도 망가 뜨리지 않는 한 빈 인증서로 두 번째 방법을 시도해도 상관 없습니다. - 시간 내 주셔서 감사합니다. @fleshgrinder – randika

0

다음은 443 (SSL)에서 수신 대기하며이 도메인에 대한 SSL 인증서가 없기 때문에 nginx는 첫 번째 또는 기본 SSL 인증서를 사용하므로 잘못된 도메인 오류가 발생합니다. 443 (SSL)에서 수신하지 않도록 간단히 제거하십시오.

server { 
    listen 443 ssl; 
    server_name example2.com www.example2.com; 
    rewrite^ http://$server_name$request_uri? permanent; 
} 
+0

글쎄,이 블록을 사용하여 https 요청을 http로 리디렉션합니다. 이 블록을 사용하지 않으면 example2.com에 대한 요청이 example1.com으로 전송됩니다. – randika

관련 문제