nginx拆分大型配置文件

nginx拆分大型配置文件

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

相关内容