Nginx : 위치 지시문에서 일치하는 서버 호스트 이름


18

단일 서버 지시문에서 여러 도메인을 실행하는 nginx가 있습니다.

server {
        listen       80;
        server_name  www.domain.com;
        server_name  x.domain.com;
        server_name  y.domain.com;

----
----
----
}

이제 위치 지정 문을 사용하여 하위 도메인을 일치시키고 기본 인증을 적용해야합니다. 동등한

location x.domain.com {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/.htpasswd;
}

어떻게해야합니까?

답변:


16

정규식을 사용하여 하위 도메인을 캡처 한 다음 나중에 해당 위치에서 하위 도메인을 사용할 수 있습니다.

server {
    server_name   ~^(?<sub>\.)?(?<domain>.+)$;

    location / {
        root   /sites/$sub;
    }
}

또는 모든 공통 구성을 다른 파일로 이동 한 다음 서브 도메인 당 서버 블록을 작성하고 외부 파일을 포함시키는 것이 좋습니다.

server {
        server_name  www.domain.com;
        include /etc/nginx/sites-enabled/default.inc;

    location / {
        ... 
    } 
}

(다른 서버에 대해 반복)


뭔가 빠졌거나 서버 이름 줄에 a ?<>?가 없습니다 . 나는 그것이 믿어야한다server_name ~^(?<sub>\.)?(?<domain>.+)$;
Mohammad AbuShady

당신은 아마 맞을 것입니다-나는 그것이 현재의 방식 인 이유를 생각할 수 없으므로 귀하의 제안으로 변경했습니다.
cyberx86

6

한 가지 옵션은 오류를 반환하고 해당 오류를 HTTP 인증을 처리하는 위치로 보내는 것입니다.

if ($host = x.domain.com) {
    return 550;
}

error_page 550 = @xauth;

location @xauth {
    auth_basic "Admin Login";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

5

지도를 사용하는 경우 위치 지시문을 사용할 필요가 없습니다. 이것은 내가 생각할 수있는 가장 간단한 해결책과 동등한 것입니다. $ http_host에 따라 htpasswd 파일의 이름을 지정할 수 있습니다 (예 :) x.domain.com.htpasswd.

map $http_host $auth_type {
    default "off";               #This will turn off auth-basic
    x.domain.com "Restricted";   #This or any other string will turn it back on
}

server {
    auth_basic $auth_type;
    auth_basic_user_file /etc/nginx/conf.d/$http_host.htpasswd;
}

1
매력처럼 작동합니다.
conradkleinespel

@Tom Siwik 어쨌든 같은 방법으로 allow/ 를 사용하여 IP 제한을 시행하도록 조정할 수 deny있습니까?
토스트

가능하면 많은 변수를 매핑 할 수 있습니다. 변수 목록은 nginx.org/en/docs/varindex.html 을 참조하십시오 . 아마도 $remote_addr대신에 필요할 것입니다 $http_host. 그래도 범위에 대해 확실하지 않습니다.
Tom Siwik

4

여러 개의 (하위) 도메인이 있고 정확하게 동일 하게 작동하지 않으면 여러 서버 blcoks를 사용합니다. 죄송하지만 더 큰 구성을 사용하더라도 이것이 가장 좋은 방법입니다.

if ($ http_host ~ foo)와 같은 것을 사용하여 빈민굴 해킹을 할 수 있지만 다음과 같이 문서화 된 경우 예측할 수없고 이상한 행동을 무시할 가능성이 높습니다. http://wiki.nginx.org/IfIsEvil

Nginx보다 현명하지 말고 제공되는 옵션 만 사용하면 두통이 훨씬 줄어 듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.