因此,我使用 Nginx 作为反向代理,并且我当前的配置已经变得非常长,因为我有大约 12 个子域,并且这个数字还会继续增长。我正在寻找一种方法来清理我的配置,我想我找到了一种方法,但我无法让它工作。以下是我正在尝试的:
server {
server_name ~^(.+)\.domain\.com$;
ssl on;
location ~ domain1 {
proxy_pass http://192.168.1.50:4040/;
}
location ~ domain2 {
proxy_pass http://192.168.1.60:4040/;
}
}
但它给了我一个错误,说
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except"
我明白它在说什么,但不确定如何解决它。如果我从指令中删除尾部斜杠proxy_pass
,Nginx 将启动而不会出现错误,但两个子域都不起作用。
我这样做对吗? 有没有更好的方法?
提前致谢!
答案1
正如评论中提到的,最好的方法(最易读和最快)是手动配置每个域。这是因为 NGINX 会在内存中创建静态实体,以避免每个请求的运行时处理。
但是,如果您确实想这样做(将 proxy_pass 传递到不同子域的不同位置),那么您可以这样做:
例如
map $http_host $my_upstream {
default http://192.168.1.1:8080;
domain1.* http://172.0.0.1:8081;
domain2.* http://10.0.0.1:80802;
}
server {
server_name ~(.+)\.domain\.com;
location / {
proxy_pass $my_upstream;
}
}
请注意,map
需要外部服务器块