Nginx vhost에 파일을 조건부로 어떻게 포함합니까?


12

아래 라인에서 나는 수도 추가로 포함하는 사이트의 특정 구성 파일이 fastcgi_params 해당 사이트에 고유합니다. 이 파일이 있으면로드하고 싶습니다.

server {
        listen 80 default;
        server_name _;
        root /path/www/$host;

        # Pass PHP scripts to php-fastcgi listening on port 9000
        location ~ \.php {
                include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;


                if (-f /path/www/$host/nginx.conf) {
                        include /path/www/$host/nginx.conf;
                }
        }
}

그러나 이것은 작동하지 않으며 내가 얻는 오류는 다음과 같습니다.

nginx : [emerg] "include"지시문은 여기에서 허용되지 않습니다 ...

최신 정보

나는 별도로 확인하는 대신 확인을 포함 시킬 수 있다고 생각했습니다 .

server {
        listen 80 default;
        server_name _;
        root /path/www/$host;

        # Pass PHP scripts to php-fastcgi listening on port 9000
        location ~ \.php {
                include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;

                include /path/www/$host/*.nginx;
        }
}

그러나 이것은 작동하지 않는 것 같습니다.


이 문제에 대한 해결책을 찾았습니까? 나는 같은 배에 있는데 어떻게했는지 궁금합니다.
jackweirdy

죄송하지만 문제가 다른 방식으로 무엇이든지 마침내 해결했다고 생각합니다.
Xeoncross

답변:


8

include서버 시작 중에 그 일을합니까? 런타임 변수는 $host사용할 수 없으며 if컨텍스트 에서 사용할 수 없습니다 .

server다른 호스트에 대한 블록 을 분할해야 합니다. 죄송합니다!


31

글쎄, 이것은 다소 오래되었지만 어쨌든 나는 해결 방법을 찾았습니다.

이 스타일로 구성된 가상 호스트 설정이 있습니다 :

/etc/nginx/sites-enabled/site.com.conf

파일이 존재하는지 확인하는 대신 (가능하지 않음) 간단히 수행합니다.

include /etc/nginx/sites-customizations/site.com.*.conf

이 방법으로-폴더에서 파일을 간단하게 만들 수 sites-customizations있는데,이 규칙에 따라 기본 구성과 이름이 동일합니다. *여분의 구성 파일이없는 경우 거의 같은 작품은 경우는 중단하지 않는 한. 원하는 경우 개별 파일에 여러 개의 추가 구성을 추가 할 수도 있습니다.


5

나는 이것이 오래되었다는 것을 알고 있지만 해결책은 누군가가 나처럼 대답을 찾는 데 도움이 될 수 있습니다.

특정 호스트에만 포함 해야하는 많은 리디렉션이 있었으며 지시문 include에는 허용되지 않지만 포함 된 파일 내부 if를 추가했습니다 if.

그래서 나는 include /etc/nginx/conf.d/redirects그 파일 안에 그 안에 있습니다.

if ($host = "www.example.com") {
    # Some conf or redirects for this site only.
}

5

지시문 glob()에서 nginx가 사용하고 includeDebian 서버에서 잘 작동 하는 함수 패턴 확장을 이용 합니다.

귀하의 경우 다음 줄을 바꾸십시오.

include /path/www/$host/nginx.conf;

이것으로 :

include /path/www/<hostname>/nginx[.]conf;

그것은 하나의 파일과 일치하는 파일 마스크이며 파일이 존재하지 않으면 nginx가 불평하지 않습니다. 그러나 include 지시문에는 변수가 허용되지 않으므로에 고정 값을 제공해야합니다 <hostname>. 개별 .conf 파일 (호스트 당 하나씩)을 생성하는 스크립트를 만들어야했습니다.

편집하다

으로 제럴드 슈나이더는 지적, 나는 유지하기 위해 제안되었다 $host허용되지 않는 교체에. 위의 제안을 변경했습니다.


1
변수 $host는 여전히 여기서 작동하지 않습니다.
제랄드 슈나이더

죄송합니다. include 지시문에 변수를 사용할 수 없습니다. 우리는 목록에서 각 호스트에 대해 단일 .conf를 생성하는 python 스크립트를 사용하지만 표준에서 "호스트 별"추가 호스트 별 편차를 광범위하게 사용합니다.
Alberto Pastore
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.