와일드 카드 하위 도메인을 https (nginx)로 리디렉션


20

와일드 카드 SSL 인증을 받았으며 모든 비 SSL 트래픽을 SSL로 리디렉션하려고합니다. 현재 하위 도메인이 아닌 URL을 리디렉션하는 데 다음을 사용하고 있습니다.

server {
listen      80;
server_name mydomain.com;

#Rewrite all nonssl requests to ssl.
rewrite     ^ https://$server_name$request_uri? permanent;
}

* .mydomain.com에 대해 동일한 작업을 수행하면 논리적으로 리디렉션됩니다.

https://%2A.mydomain.com/

모든 하위 도메인을 https와 동등한 것으로 어떻게 리디렉션합니까?


2
$ server_name 대신 $ host가 아닌 이유는 무엇입니까?
cjc

답변:


47

그게 다야...

server {
    listen      80;
    server_name *.mydomain.com;

     #Rewrite all nonssl requests to ssl.
     return 301 https://$host$request_uri;
}

2
조금 더 설명하면 더 나은 답변이 될 수 있습니다.
Dave M

3
@ dave-m, 설명이 필요합니까? $host변하기 쉬운? $request_uri?
cadmi 2016 년

작동하지 않습니다. https : //%2A.handy.travel/
Damon Yuan

2

NGINX 공식 문서는 경로 재 지정에 rewrite 지시문을 사용하는 대신 return 지시문을 사용하도록 권장합니다. 다시 작성되는 요청은 해당 서버를위한 것이 아니지만 해당 서버 블록에서 여전히 처리되기 때문입니다. 따라서 모든 처리가 중지되고 응답이 즉시 전송되므로 return 지시문으로 리디렉션이 올바르게 수행됩니다. NGINX는 재 지정을 위해 재 작성을 권장하지 않습니다 : http://nginx.org/en/docs/http/converting_rewrite_rules.html

return 지시문의 구문은 다음과 같습니다. return code URL; 원래 영구 재 작성을 수행 했으므로 301을 코드로 사용하여 영구 리디렉션임을 표시 할 수 있습니다. 귀하의 https 주소는 url 섹션에 전달됩니다. 참조 : http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return

따라서 올바른 구성은

server {
listen      80;
server_name *.mydomain.com;

#Redirect all nonssl requests to ssl.
return 301 https://$server_name$request_uri;
}

와일드 카드 서버 블록을 사용하여 SSL 도메인으로 올바르게 리디렉션 할 수 있습니다. 위의 주석에서 제안한대로 밑줄 일반 서버 이름 '_'또는 $ host를 시도 할 수도 있습니다. 알려주세요!


return일반적으로 사용하는 것이 좋지만 "* .mydomain.com"인 리디렉션에 $ server_name을 사용하므로 제안 된 구성이 올바르지 않습니다. 위의 주석에서 @cjc가 올바른 수정을 이미 설명했습니다 . $host대신 사용해야합니다 $server_name.
Maxim Dounin

그렇습니다. 아 내 관심 스팬은 희미 해 보인다!
Apurva Sukant 오전

위의 혼란 대신, SSL 구성에 대한 팁을 제공하여 성능을 크게 향상시킬 수 있습니다. 와일드 카드 인증서를 사용하는 경우 SSL을 설정하는 가장 효율적인 방법은 'ssl stapling'을 설정하는 것입니다. 이렇게하면 모든 하위 도메인에 대해 기본 서버에서 SSL을 한 번 설정하고 각 하위 도메인에 대해 별도의 SSL 인증을 저장할 수 있습니다. ssl_stapling on; 리졸버 8.8.8.8; ssl_stapling_file /ssl_keys/example.com_staple; ssl_stapling_verify on; Refference- calomel.org/nginx.html
Apurva Sukant

2
이어야한다return 301 https://$host$request_uri;
scarver2

return 301 https://$server_name$request_uri;포트 443에서 https를 사용하기 위해 포트 80, 8080 및 8181 을 듣고 있습니다. 리디렉션 된 URL에 여전히 원래 포트 번호가 있다는 문제가 있습니다. 80은 문제가되지 않지만 8080은 다음과 같이 나옵니다https://example.com:8080
A.Grandt

-1

다음과 같이 해보십시오 :

server {
  listen 80;
  server_name ~^(.*)\.mydomain\.com$;
  set $servername $1;
  rewrite ^(.*)$ https://$servername.mydomain.com/$1;
}

catch는 와일드 카드 서버를 정의하고 해당 이름을 기반으로 리디렉션을 수행하는 것입니다.


지나치게 허용되는 정규 표현식 그룹.
Kzqai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.