모범 사례 : 별도의 server
하드 코딩server_name
nginx의 모범 사례는 server
이와 같은 리디렉션 ( server
기본 구성 과 공유되지 않음)에 대해 별도의 방법을 사용하여 모든 것을 하드 코딩하고 정규식을 전혀 사용하지 않는 것입니다.
제공 할 인증서를 미리 알아야하므로 HTTPS를 사용하는 경우 도메인을 하드 코딩해야 할 수도 있습니다.
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
server_name www.example.org;
return 301 $scheme://example.org$request_uri;
}
server {
server_name example.com example.org;
# real configuration goes here
}
내에서 정규 표현식 사용 server_name
많은 사이트가 있고 최고의 성능을 신경 쓰지 않지만 www.
접두사 와 관련하여 모든 사이트에서 동일한 정책을 갖기 를 원한다면 정규식을 사용할 수 있습니다. 별도의 방법을 사용하는 것이 가장 좋습니다 server
.
https를 사용하면이 솔루션이 까다로워집니다. 제대로 작동하려면 모든 도메인 이름을 포괄 할 수있는 단일 인증서가 있어야하기 때문입니다.
비 www
에 www
w / 전용 하나의 정규식 server
모든 사이트에 대해 :
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
www
비에 www
전용 하나의 w / 정규식 server
모든 사이트에 대해 :
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
www
비에 www
최선을 다하고에서 w / 정규식 server
일부 사이트 :
이 도메인의 몇, 당신은 일치로이 같은 것을 사용할 수 있습니다 충당하기 위해 정규식을 제한 할 필요가있을 수있다 www.example.org
, www.example.com
그리고 www.subdomain.example.net
:
server {
server_name ~^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$;
return 301 $scheme://$domain$request_uri;
}
nginx로 정규 표현식 테스트
pcretest
시스템 에서 정규 표현식이 예상대로 작동하는지 테스트 할 수 있습니다 . 이는 pcre
nginx가 정규 표현식에 사용하는 것과 정확히 동일한 라이브러리입니다.
% pcretest
PCRE version 8.35 2014-04-04
re> #^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$#
data> test
No match
data> www.example.org
0: www.example.org
1: example.org
data> www.test.example.org
No match
data> www.example.com
0: www.example.com
1: example.com
data> www.subdomain.example.net
0: www.subdomain.example.net
1: subdomain.example.net
data> subdomain.example.net
No match
data> www.subdomain.example.net.
No match
data>
"Host"헤더에 후행 점이있는 경우 nginx 서버 이름 정규식에 따라 nginx가 이미 처리하므로 후행 점 또는 대소 문자를 걱정할 필요가 없습니다 .
if
기존 server
/ HTTPS 내에 뿌 립니다 :
이 최종 솔루션은 일반적으로 모범 사례로 간주되지는 않지만 여전히 작동하고 작동합니다.
실제로 HTTPS를 사용하는 경우이 최종 솔루션을 유지 관리하기가 더 쉬울 수 있습니다. 다른 server
정의 사이에 전체 ssl 지시문을 복사하여 붙여 넣을 필요가 없으며 대신 스 니펫을 필요한 서버를 통해 사이트를보다 쉽게 디버깅하고 유지 관리 할 수 있습니다.
비 www
에 www
:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
www
아닌 www
:
if ($host ~ ^www\.(?<domain>.+)$) {
return 301 $scheme://$domain$request_uri;
}
단일 선호 도메인 하드 코딩
단일 도메인에서 server
사용할 수 있는 여러 도메인 간의 일관성뿐만 아니라 약간의 성능을 원한다면 단일 단일 도메인 을 명시 적으로 하드 코딩하는 것이 좋습니다.
if ($host != "example.com") {
return 301 $scheme://example.com$request_uri;
}
참고 문헌 :
Dashboard > Settings > General Settings
이 없는지 확인하십시오www
. nginx를 어떻게 구성하든,이 URL에 www가 있으면 www가있는 URL로 리디렉션됩니다.