我有一台装有 nginx 的服务器,它运行着一个生产网站,不久的将来它应该会被一个新网站取代。
为了迎接那一天的到来,我正在准备运行新网站所需的所有配置。
我想要的是一个在主域中nginx.conf
保存字符串的全局变量(例如'old'
或表示当另一个站点处于活动状态时'new'
应该在主域上处于活动状态的站点)。example.com
other.example.com
我试过:
在nginx.conf
http{
...
set $site_in_production 'new';
...
include /etc/nginx/conf.c/*.conf;
}
在/etc/nginx/conf.d/example.com.conf
server{
...
if($site_in_production='new'){
server_name other.example.com;
} else {
server_name example.com www.example.com;
}
...
}
在/etc/nginx/conf.d/new.example.com.conf
server{
...
if($site_in_production='new'){
server_name example.com www.example.com;
} else {
server_name other.example.com;
}
...
}
但是,运行 configtest 时出现此错误:
nginx: [emerg] "set" directive is not allowed here in /etc/nginx/nginx.conf:XX
所以我猜测该set
指令不允许出现在server
块之外
有没有办法通过所有 nginx 配置文件中的单个变量实现此功能?
非常感谢!
答案1
只需编写一个脚本。当然,内置于 nginx 中的优雅解决方案会很好……但我们不要忘记 *nix 为我们提供的工具:
#!/bin/bash
for i in /etc/nginx/conf.d/*;
do
sed -i 's/server_name example.com www.example.com;/server_name other.example.com;/g' "$i";
done
...您可能必须逃避这些分号..不确定...