
웹사이트의 기본 도메인 foo.com
과 하위 도메인을 모두 호스팅하는 Nginx 서버가 있습니다 . bar.foo.com
내 기본 도메인에 대한 인증서만 있으므로 하위 도메인에 대한 HTTP 요청만 원합니다. 두 서버 블록을 모두 구성했으며 모든 요청이 잘 작동합니다. http://foo.com
로 리디렉션되고 HTTP에만 유지됩니다 https://foo.com
.http://bar.foo.com
그러나 연결을 시도할 때 문제가 발생합니다 https://bar.foo.com
. 443 또는 SSL 요청을 수신하도록 하위 도메인 서버 블록을 구성하지 않았음에도 불구하고 요청이 계속 처리되고 브라우저에서 인증서에 다른 호스트 이름이 있다는 경고가 표시됩니다. 내가 요청한 페이지가 아닌 기본 도메인에서 가져온 페이지입니다 foo.com
.
따라서 server
내 기본 도메인의 HTTPS 요청만 수신하도록 되어 있던 블록이 어떻게든 하위 도메인의 HTTPS 요청도 수신하고 있는 것 같습니다. 이런 일이 발생하는 것을 원하지 않습니다.
기본 도메인에 대한 구성은 다음과 같습니다.
server {
listen 80;
server_name foo.com www.foo.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name foo.com www.foo.com;
ssl on;
ssl_certificate /etc/nginx/cert/foo.com.pem;
ssl_certificate_key /etc/nginx/cert/foo.com.key;
...
location / {
root /var/www/foo.com/public_html;
index index.html index.htm;
}
}
하위 도메인에 대한 구성은 다음과 같습니다.
server {
listen 80;
server_name bar.foo.com www.bar.foo.com;
location / {
root /var/www/bar.foo.com/public_html;
index index.html index.htm;
}
}
다음은 Nginx 구성 파일의 일부입니다.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
location / {
}
foo.com
내 기본 도메인의 443 서버 블록에서 삭제 를 시도했지만 listen
도움이 되지 않습니다.
https://bar.foo.com
Nginx가 요청을 듣지 않거나 단순히 404 또는 444를 반환하기를 바랍니다 .
답변1
포트 443에 대해 하나의 블록만 구성되어 있으므로 server
포트 443에 대한 모든 요청을 처리하기 위해 nginx에서 사용하는 기본 가상 서버입니다.
포트 443(TLS)에 대한 기본 서버를 추가하려면 다음 가상 호스트를 추가하면 됩니다.
server {
listen 443 default_server;
server_name _;
return 444;
}
답변2
나는 해결책을 알아 냈습니다. @Tero 및 @Cosmic이 올바르게 지적한 것처럼 기본 도메인에 대한 유일한 443 블록이 모든 443 요청에 대한 server
기본 블록으로 설정됩니다 .server
server
Nginx 구성 파일의 블록에 주석을 달고 /etc/nginx/nginx.conf
다음 두 server
블록을 추가했습니다.
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate /etc/nginx/cert/foo.bar.pem;
ssl_certificate_key /etc/nginx/cert/foo.bar.key;
return 444;
}
첫 번째 블록은 모든 HTTP 요청에 대한 기본 블록으로 설정되어 server
일치하지 않는 요청을 삭제하고, 마찬가지로 두 번째 블록은 일치하지 않는 443 또는 HTTPS 요청을 삭제합니다.
Nginx는 모든 SSL 블록에 대한 인증서를 요구하므로 @Tero가 제공한 솔루션은 작동하지 않으므로 server
인증서를 제공해야 합니다.