Nginx의 와일드 카드 가상 호스트


25

방금 서버에 Nginx를 설치했으며 결과에 매우 만족하지만 여전히 와일드 카드 가상 호스트를 삽입하는 방법을 알 수 없습니다.

이것은 내가 원하는 [디렉토리] 구조입니다 :

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)

보시다시피, 매우 기본적이지만, 새 하위 도메인에 대한 A 레코드를 추가하여 도메인을 추가하는 기능을 원합니다. public_html에서 동일한 이름의 하위 디렉토리를 즉시 가리 킵니다.

웹에는 물건이 있지만 정확히 이와 같은 것을 보지 못했습니다.

도움을 주시면 감사하겠습니다.


예제에 두 개의 다른 이름이있을 때 "같은 이름의 서브 디렉토리"가 무엇을 의미하는지 잘 모르겠습니다. subdomain 1/ x.example.com-명확히 할 수 있습니까?
nickgrim

사실, 명확하지 않은 죄송합니다. 하위 도메인 x.example.com이 있다고 가정하면 디렉토리는 / public_html / x이지만 / public_html /을 가리 키려면 example.com과 www.example.com이 모두 필요합니다.
rorygilchrist

답변:


39

보여 줄게

구성 파일

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}

테스트 파일

두 개의 테스트 파일이 있습니다 :

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T

테스팅

정적 서버 이름 :

$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

그리고 정규식 서버 이름 :

$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

T

불행히도 작동하지 않습니다. 모든 하위 도메인은 public_html을 가리 킵니다. 다음은 두 번째 서버 구성입니다.server{ listen 80; server_name ~^(.*)\.example\.com$ ; location / { root /var/www/public_html/$1; index index.html index.htm index.php; } location ~ \.php$ { root $1; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/public_html/$1$fastcgi_script_name; include fastcgi_params; } }
rorygilchrist

4
"안타깝게도 작동하지 않습니다"는 불행히도 세부 사항을 제공하지 않습니다. 자세한 내용은 항상 nginx error.log를 참조하십시오. 이 구성의 작동 방식을 보여주기 위해 답변을 업데이트했습니다. 내 Nginx 버전이 0.8.54임을 알 수 있습니다
Alexander Azarov

지금 바로 나를 위해 완벽하게 일했습니다.
클레어 퍼니

5

아래의이 Nginx 구성 파일을 사용 /var/www/vhost/하면 해당 로그 파일을 동적으로 생성하면서 해당 폴더로 동적으로 라우팅하는 와일드 카드 호스트 이름을 사용할 수 있습니다.

http://test1.wildcard.com/var/www/vhost/test1
                                                   /var/log/nginx/test1.wildcard.com-access.log                                                    /var/log/nginx/test1.wildcard.com-error.log

http://test2.wildcard.com/var/www/vhost/test2
                                                   /var/log/nginx/test2.wildcard.com-access.log                                                    /var/log/nginx/test2.wildcard.com-error.log

wildcard.conf

server {
  listen 80;
  listen [::]:80;

  #  Match everything except dot and store in $subdomain variable
  #  Matches test1.wildcard.com, test1-demo.wildcard.com
  #  Ignores sub2.test1.wildcard.com
  server_name ~^(?<subdomain>[^.]+).wildcard.com;

  root /var/www/vhost/$subdomain;

  access_log /var/log/nginx/$host-access.log;
  error_log  /var/log/nginx/$host-error.log;
}

솔루션을 설명하십시오.
앤드류 슐만

이것은 기존 답변과 거의 동일한 것으로 보입니다. 이것은 무엇을 추가합니까?
Michael Hampton

1
좀 더 구체적으로 제공합니다. 그것이 모두를 돕기를 바랍니다.
AnthumChris

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