우리는 균등하게 소수의 응용 프로그램을 SOA
패턴 아래에 가지고 있습니다. 동질성 때문에 Nginx에서 하나의 구성을 통해 모든 SOA
개의 응용 프로그램을 프록시 할 수있는 깔끔한 패턴을 정의 할 수있었습니다. Nginx 구성에 따라 절대적으로 DNSmasq
과 함께 절대적인 경이로움을 수행하여 anything.yourdomain.devel
을 해결합니다. a.stackoverflow.devel
, b.stackoverflow.devel
도메인을 만들고지도를 통해 지정된 포트를 통해 프로젝트 폴더 아래의 적절한 앱 서버에 라우팅합니다.Nginx 구성의 업스트림 블록에서 서버 포트를 노출하는 방법?
worker_processes 2;
events {
worker_connections 1024;
}
http {
map $host $static_content_root {
hostnames;
default /path/to/project/folder;
# For typical standalone apps living in your project directory
# *.myapp.local.devel -> /path/to/project/myapp/public
~^([^\.]+\.)*(?<app>[^\.]+)\.devel$ /path/to/project/folder/$app/public; #rails pattern
}
map $app $devel_proxy_port1 {
default 3000;
domain1 3000;
domain2 4000;
}
map $app $devel_proxy_port2 {
default 3001;
domain1 3001;
domain2 4001;
}
server {
listen 127.0.0.1;
server_name ~^([^\.]+\.)*(?<app>[^\.]+)\.[^\.]+.devel$;
location/{
root $static_content_root; # Using the map we defined earlier
try_files $uri $uri/index.html @dynamic;
}
location @dynamic {
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-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
proxy_pass http://127.0.0.1:$devel_proxy_port1;
}
}
}
이제 Nginx에 부하 분산 장치 뒤에 여러 서버를 시뮬레이션하기 위해있다. 내가 직접 하나의 서버 : 포트 쌍을 가리키는보다는 상류를 가리키는 프록시 구성을 다음과 같은 생각.
proxy_pass http://backend;
upstream backend {
server http://127.0.0.1:$devel_proxy_port1;
server http://127.0.0.1:$devel_proxy_port2;
}
나는 일하는 것이 위의 생각하지만 항상
상류 컨텍스트 내에서 블록을 사용할 수없는
지도의 변수를 암시 다음과 같은 오류를 방출한다. [emerg] 69478#0: invalid host in upstream "http://127.0.0.1:$devel_proxy_port1" in /usr/local/etc/nginx/nginx.conf:57
이 예상되는 행동인가?
내가 물어 본 요점은 업스트림 블록 내부에서 매개 변수화 된 포트를 얻는 것입니다. 모든 단일 앱에는 포트 쌍이 할당되며 도메인의 이름 식별자에 따라 포트에서 가져옵니다. dmitry.stackoverflow.com은 stackoverflow.com 도메인에 dmitry라는 이름을 가지고 있으며 포트 쌍에 매핑 된 stackoverflow에 많은 이름이 많이 있습니다. 당신의 대답이 그 시나리오로 충분합니까? 어떻게 보이지? – kaji
각 이름 식별자에 대해 별도의 업스트림을 만들어야합니다. –
한 응용 프로그램이 3000 및 3001 포트에 바인딩되어 있지만 업스트림 내 포트가 $ app의 맵 블록에 따라 포트를 동적으로 할당 할 수 있도록 변수가 필요한 경우 작동하는 것으로 알고 있습니다. $ 앱은 첫 번째 게시물의 첫 번째지도 블록을 기준으로 30 개의 다른 값을 가질 수 있습니다. 간결을 위해, 나는 단지 $ app ie에 가능한 두 가지 가치를 보여 주었다. domain1 and domain2 – kaji