Nginx 하위 도메인 구성


79

아파치에 대한 역방향 프록시 역할을하는 nginx가 있습니다. 이제 다른 디렉토리의 파일을 제공 할 새 하위 도메인을 추가해야하지만 동시에 기본 호스트에 대해 가지고있는 모든 위치 및 proxy_pass 지시문이 하위 도메인에도 적용되기를 원합니다.

기본 호스트에서 새 하위 도메인으로 규칙을 복사하면 작동하지만 하위 도메인이 규칙을 상속 할 수있는 방법이 있습니까? 다음은 샘플 구성입니다.

server {
    listen       80;
    server_name  www.somesite.com;
    access_log  logs/access.log;
    error_log  logs/error.log error;


   location /mvc {
      proxy_pass  http://localhost:8080/mvc;
   }


   location /assets {
      alias   /var/www/html/assets;
      expires     max;
   }

   ... a lot more locations
}

server {
    listen       80;
    server_name  subdomain.somesite.com;

    location / {
                root   /var/www/some_dir;
                index  index.html index.htm;
        }
}

감사

답변:


92

공통 부분을 다른 구성 파일과 include두 서버 컨텍스트 모두에서 이동할 수 있습니다. 이것은 작동합니다.

server {
  listen 80;
  server_name server1.example;
  ...
  include /etc/nginx/include.d/your-common-stuff.conf;
}

server {
  listen 80;
  server_name another-one.example;
  ...
  include /etc/nginx/include.d/your-common-stuff.conf;
}

편집 : 다음은 실행중인 서버에서 실제로 복사 한 예입니다. /etc/nginx/sites-enabled(Ubuntu / Debian의 nginx에 대한 일반적인 항목) 에서 기본 서버 설정을 구성합니다 . 예를 들어, 내 주 서버 bunkus.org의 구성 파일은 /etc/nginx/sites-enabled다음과 같습니다.

server {
  listen   80 default_server;
  listen   [2a01:4f8:120:3105::101:1]:80 default_server;

  include /etc/nginx/include.d/all-common;
  include /etc/nginx/include.d/bunkus.org-common;
  include /etc/nginx/include.d/bunkus.org-80;
}

server {
  listen   443 default_server;
  listen   [2a01:4f8:120:3105::101:1]:443 default_server;

  include /etc/nginx/include.d/all-common;
  include /etc/nginx/include.d/ssl-common;
  include /etc/nginx/include.d/bunkus.org-common;
  include /etc/nginx/include.d/bunkus.org-443;
}

예를 들어 다음 /etc/nginx/include.d/all-common은 두 server컨텍스트 에서 모두 포함 된 파일입니다 .

index index.html index.htm index.php .dirindex.php;
try_files $uri $uri/ =404;

location ~ /\.ht {
  deny all;
}

location = /favicon.ico {
  log_not_found off;
  access_log off;
}

location ~ /(README|ChangeLog)$ {
  types { }
  default_type text/plain;
}

1
좋은 생각. 내가 당신이 제안한대로 지시문을 감쌀 필요가 있고 nginx가 다시 시작할 때 nginx가 nginx : [emerg] "location"지시문은 여기에서 허용되지 않는다고 불평합니다
Thomas

거의 모든 nginx 구성은 비슷하게 포함 된 하위 구성 파일로 구성됩니다. 예, 작동합니다. include지시문과 포함 된 파일의 내용으로 실제 구성을 게시 할 수 있습니다. 원래 질문을 적절하게 편집하십시오.
Moritz Bunkus 2012 년

실제 작동하는 서버 구성 파일을 포함하도록 대답을 업데이트했습니다.
Moritz Bunkus 2012 년

3
잘 작동합니다. 내 잘못이야. 이 공통 파일을 모든 .conf 파일이 자동으로로드되어 오류가 발생한 디렉토리에 넣었습니다. 감사합니다
Thomas

3
그래, 나도 그 문제에 부딪 혔어. 그래서 /etc/nginx/include.dDebian / Ubuntu 시스템에있는 일반적인 nginx 구성 파일이 제공하지 않는 포함 된 모든 파일을 넣기로 선택했습니다 .
Moritz Bunkus 2012 년

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