【发布时间】:2017-01-10 22:49:49
【问题描述】:
在SOA 模式下,我们有一些松散的同质应用程序。由于同质性,我们已经能够在 Nginx 中定义一些简洁的模式来通过一个配置代理我们所有的SOA 应用程序。遵循 Nginx 配置绝对可以与DNSmasq 一起解决anything.yourdomain.devel 问题,例如。 a.stackoverflow.devel、b.stackoverflow.devel 域并通过地图通过指定端口将其路由到项目文件夹下的适当应用服务器。
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;
}
我认为上述方法可行,但它总是发出以下错误提示 map 块的变量在 upstream 上下文中不可用。
[emerg] 69478#0: invalid host in upstream "http://127.0.0.1:$devel_proxy_port1" in /usr/local/etc/nginx/nginx.conf:57
这是预期的行为吗?
【问题讨论】:
标签: nginx reverse-proxy