여러 nginx 설정 파일에서 서버의 위치를 ​​정의 할 수 있습니까?


14

동일한 호스트에서 여러 루비 앱이 실행 중입니다.

~/app1
~/app2
~/app3

그리고 나는 다음과 같은 하위 디렉토리를 사용하여 이러한 앱을 nginx 프록시로 만들고 싶습니다.

   http://example.com/app1
   http://example.com/app2
   http://example.com/app3

nginx가 여러 파일에서 이러한 위치를 정의 할 수 있도록 지원하면 모든 앱에 대해 하나의 모 놀리 식 구성 파일을 사용하는 대신 각 구성을 앱으로 유지할 수 있는지 궁금합니다.

~/app1/nginx.conf
~/app2/nginx.conf
~/app3/nginx.conf

세 가지 구성 파일 각각에 단일 위치 지시문으로 서버를 정의하려는 순진한 시도로 conflicting server name "example.com" on [::]:80, ignored다음과 같은 구성이 발생했습니다.

upstream app1 { server 127.0.0.1:4567; }
server {
  listen      [::]:80;
  listen      80;
  servername  example.com
  location    /app1 {
     proxy_pass  http://app1;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host $http_host;
     proxy_set_header X-Forwarded-Proto $scheme;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header X-Forwarded-Port $server_port;
     proxy_set_header X-Request-Start $msec;
  }
}

이 방법으로 구성을 구성하는 방법이 있습니까?

답변:


9

include를 통해 외부 구성을 포함 할 수 있습니다.

include /path/to/config1.conf;
include /path/to/config2.conf;
include /path/to/confdir/*.conf;

server {
    server_name example.com;
    listen      [::]:80;
    listen      80;
}

별도의 구성 내에서 유효한 코드 블록을 사용할 수 있습니다.

upstream app1 {
    server 127.0.0.1:8080;
}

location /app1 {
    proxy_pass http://app1;
}

5
이것이 실제로 작동합니까? 업스트림 모듈이 서버 모듈 블록 외부에 있지 않아도됩니까?
Curley

5
서버 블록 외부에서 위치 지시문이 허용되지 않는 것 같습니다. 적어도 저에게는 nginx 보고서가 "location" directive is not allowed here있습니다.
Alexander Amelkin

예 ... 응용 프로그램 당 여러 파일없이 올바르게 수행하는 간단한 방법은 없습니다. 서버 블록 내부에서 작동하는 파일, 외부에서 작동하는 파일입니다. 나는 유연성을 추측하고 와일드 카드를 사용할 수있는 청소하기 위해 : include /etc/nginx/above_server.d/*include /etc/nginx/in_server.d/*
jeteon

1
이 답변은 잘못되었습니다
AmirHossein

11

이 구성을 사용할 수 있다고 생각합니다.

server {
    server_name example.com;
    listen      [::]:80;
    listen      80;

    include /path/to/applications/*/nginx.conf;
}

그런 다음 각 응용 프로그램의 디렉토리에서 다음과 같이 리디렉션을 구성하십시오.

location    /app1 {
    proxy_pass  http://app1;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Request-Start $msec;
}

2
단점은 server블록 내에서 여러 업스트림을 정의 할 수 없지만 OP의 유스 케이스 가이 답변에 잘 부합한다고 생각합니다.
jeteon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.