[nginx] nginx server_name 와일드 카드 또는 catch-all

여러 웹 사이트를 제공하는 nginx 인스턴스가 실행 중입니다. 첫 번째는 서버의 IP 주소에 대한 상태 메시지입니다. 두 번째는 admin.domain.com. 이것들은 훌륭하게 작동합니다. 이제 다른 모든 도메인 요청이 단일로 이동하고 싶습니다. index.php많은 도메인과 하위 도메인이 있으며 모두 nginx 구성에 나열하는 것은 비현실적입니다.

지금까지 설정 server_name을 시도했지만 *잘못된 와일드 카드로 실패했습니다. *.*다른 서버 블록을 추가 할 때까지 작동 한 다음 충돌하는 것 같습니다.

다른 사이트가 정의 된 후 nginx에서 catch-all 서버 블록을 실행하는 방법이 있습니까?

NB 저는 스팸 발송자가 아닙니다. 유용한 콘텐츠가 포함 된 정품 사이트입니다. 데이터베이스의 동일한 CMS에 의해 구동됩니다!



답변

포괄 서버 블록에서 청취 옵션을 이것으로 변경하십시오. (추가 default_server) 이것은 (지정된 포트에서) 정의되지 않은 모든 연결을 취합니다.

listen       80  default_server;

파일이나 폴더가 존재하지 않는 경우 모든 것을 index.php로 푸시하려면;

try_files                       $uri /$uri /index.php;


답변

간단한 밑줄도 작동합니다.

server_name  _;

출처 : http://nginx.org/en/docs/http/server_names.html


답변

이것은 작동합니다 :

server_name ~^(.+)$


답변

나를 위해 어떻게 든 default_server가 작동하지 않는 것을 정의하십시오. 나는 그것을 해결했다

server_name ~^.*$

모두의 정규 표현식을 사용합니다.


답변

server지시어 1 개만

에서 의 Nginx listen문서

default_server 매개 변수 (있는 경우)는 서버가 지정된 주소 : 포트 쌍의 기본 서버가되도록합니다. 지시문에 default_server 매개 변수가없는 경우 address : port 쌍이있는 첫 번째 서버가이 쌍의 기본 서버가됩니다.

server지시문 이 하나만 있으면 모든 요청을 처리하므로 아무것도 설정할 필요가 없습니다.


여러 server지시어

모든 요청을 지정된 server지시문 과 일치 시키려면 default_server매개 변수를에 추가 하기 만하면 listenNginx는이 server지시문을 기본값으로 사용합니다 .

server {
    listen 80 default_server;
}

server_name _;

에서 의 Nginx 문서

포괄 서버 예제에서 이상한 이름 “_”을 볼 수 있습니다.

server {
    listen       80  default_server;
    server_name  _;
    return       444;
}

이 이름에는 특별한 것이 없으며 실제 이름과 절대 교차하지 않는 수많은 잘못된 도메인 이름 중 하나 일뿐입니다. “-“및 “! @ #”과 같은 다른 잘못된 이름도 동일하게 사용할 수 있습니다.

설정 한 내용은 중요하지 않으며 잘못된 도메인 이름server_name 일뿐 입니다.


답변

이제 마스크를 사용할 수 있습니다.

server {
    listen       80;
    server_name  *.example.org;
    ...
}

server {
    listen       80;
    server_name  mail.*;
    ...
}

자세한 내용은 http://nginx.org/en/docs/http/server_names.html을 참조하십시오.


답변

Host헤더 ( HTTP / 1.0 에서 허용됨)가 있는 요청도 포착 하려면 regex 및 empty 둘 다 사용할 수 있습니다 server_name.

server {
    listen      80;
    server_name ~. "";
}