와일드 카드 하위 도메인을 https (nginx)로 리디렉션 데 다음을 사용하고 있습니다. server { listen

와일드 카드 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와 동등한 것으로 어떻게 리디렉션합니까?



답변

그게 다야…

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

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


답변

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를 시도 할 수도 있습니다. 알려주세요!


답변

다음과 같이 해보십시오 :

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

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


답변