동일한 컴퓨터에서 여러 서버를 실행하고 있으며 일부는 http 만 있고 일부는 http와 https가 있습니다. 기본 구성 파일에서 포함 된 별도의 파일에 여러 서버 블록이 정의되어 있습니다.
다른 구성 파일의 다른 server_names와 일치하지 않는 요청에 일반 "유지 관리 페이지"를 제공하는 http 용 "기본"서버를 설정했습니다. http 기본 서버는 예상대로 작동하고 server_name "_"을 사용하며 포함 목록에서 첫 번째로 나타납니다 (서버에서 중복 된 server_name이 처음 나타나는 서버가 사용되는 것을 관찰했기 때문에). 이것은 잘 작동합니다.
나는 동일한 정확한 서버 블록 ( "listen 80 default_server"를 "listen 443 default_server"로 전환하고 페이지 "return 444"를 대신하는 것만)을 기대하지만 그렇지 않습니다. 대신 새 기본 https 서버가 들어오는 모든 https 연결을 실제로 가져 와서 실패하게 만드는 것처럼 보이지만 다른 서버 블록에는 들어오는 요청에 더 적합한 server_name이 있습니다. 새로운 기본 https 서버를 제거하면 반 올바른 동작이 다시 시작됩니다. https가있는 웹 사이트는 모두 올바르게로드됩니다. 그러나 https가없는 웹 사이트는 모두 포함 파일의 첫 번째 https 서버로 라우팅됩니다 (문서에 따라 "default_server"가 나타나지 않으면 나타나는 첫 번째 서버 블록은 "default"입니다).
그래서 내 질문은 SSL 연결을 위해 nginx에서 "기본 서버"를 정의하는 올바른 방법은 무엇입니까? 내가 명시 적으로 "default_server"를 설정하면 욕심이 생기고 모든 연결을 잡는 반면 nginx가 "기본 서버"를 암시 적으로 결정할 때 예상대로 작동합니다 (잘못된 서버를 기본값으로 설정하고 다른 실제 서버로 설정) 올바르게 동작)?
여기에 "기본 서버"가 있습니다. Http는 다른 서버를 손상시키지 않고 작동합니다. Https는 다른 서버를 중단하고 모두 사용합니다.
server {
listen 443 ssl default_server;
server_name _;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
return 444;
}
server {
listen *:80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
root /home/path/to/templates;
location / {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
}
여기에 무엇이 잘못 되었습니까?