nginx拆分大配置文件


17

我的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....;
    }

现在,如果我想将其拆分为每个文件中只有几个位置(位置在一起),那么在不引起混乱的情况下进行处理的正确方法是什么(例如在每个文件中声明root,因此具有奇怪的路径是nginx尝试查找文件)?

Answers:


24

您可能正在寻找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;

在目录include中包含每个* .conf文件。


我已经考虑了这一点,但跳过了它,因为这将意味着编辑文件内容,而不仅仅是取消启用站点的文件夹中的文件的链接。
oliverjkb 2015年

@ardukar,所以您的解决方案是使用启用了站点的文件夹?
Mark Stosberg

我现在有点困惑...
FLXN

抱歉这么晚回答!好像我没有阅读通知。-.-我已经在使用FLXN的解决方案。但这并不能使我高兴。由于我正在为一家较小的公司构建服务器,该服务器仅通过浏览器进行管理,因此我不想在文件中进行更改。如果通过浏览器停用了服务,我也希望停用nginx中的子文件夹(例如“位置”),因此取消链接启用了sites的文件夹中的配置文件似乎是最好的主意。
oliverjkb

6

您可以使用以下方法创建站点文件夹

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块前不应有注释。而是将第一行中的注释移到该块内。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.