我的 nginx 默认配置文件变得非常大。我想将其拆分为几个较小的配置文件,每个文件仅包含一个位置,每个文件最多包含 4 个位置,以便我可以快速启用/禁用它们。
实际文件如下所示:
server {
listen 80 default_server;
root /var/www/
location /1 {
config info...;
}
location /2 {
config info....;
}
location /abc {
proxy_pass...;
}
location /xyz {
fastcgi_pass....;
}
location /5678ab {
config info...;
}
location /admin {
config info....;
}
现在,如果我想将其拆分为每个文件中只有几个位置(属于一起的位置),那么在不造成混乱的情况下执行此操作的正确方法是什么(例如在每个文件中声明根,因此 nginx 尝试查找文件的路径很奇怪)?
答案1
您可能正在寻找 Nginx 的include
功能:
http://nginx.org/en/docs/ngx_core_module.html#include
你可以像这样使用它:
server {
listen 80;
server_name example.com;
[…]
include conf/location.conf;
}
include 还接受通配符,因此您也可以写
include include/*.conf;
包含目录中的每个 *.conf 文件包括。
答案2
您可以使用以下方式创建站点文件夹
mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled
# 然后将大your_config.conf
文件分割成较小的文件sites-available/
:
YOURCONF="/etc/nginx/conf.d/your_config.conf"
cd /etc/nginx
mkdir -p sites-available sites-enabled
cd sites-available/
csplit "$YOURCONF" '/^\s*server\s*{*$/' {*}
for i in xx*; do
new=$(grep -oPm1 '(?<=server_name).+(?=;)' $i|sed -e 's/\(\w\) /\1_/g'|xargs);
if [[ -e $new.conf ]] ; then
echo "" >>$new.conf
cat "$i">>$new.conf
rm "$i"
else
mv "$i" $new.conf
fi
done
(我从这个来源增强了这一点:https://stackoverflow.com/a/9635153/1069083)
http
确保在你的块末尾添加此内容/etc/nginx/conf.d/*.conf;
:
include /etc/nginx/sites-enabled/*.conf;
注意:块外的注释server
会被剪切到每个文件的底部,因此块前不应该有注释server
。请将注释移到块内的第一行,例如:
# don't put comments here
server {
# put your comments about domain xyz.org here
listen 80;
server_name xyz.org;
...