nginx拆分大配置文件

oli*_*jkb 30 files configuration 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....;
    }
Run Code Online (Sandbox Code Playgroud)

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

FLX*_*LXN 42

您可能正在寻找 Nginx 的include功能:http : //nginx.org/en/docs/ngx_core_module.html#include

你可以这样使用它:

server {
  listen 80;
  server_name example.com;
  […]
  include conf/location.conf;
}
Run Code Online (Sandbox Code Playgroud)

include 也接受通配符,所以你也可以写

include include/*.conf;
Run Code Online (Sandbox Code Playgroud)

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


rub*_*o77 7

您可以使用以下命令创建站点文件夹

mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled
Run Code Online (Sandbox Code Playgroud)

# 然后将你的大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
Run Code Online (Sandbox Code Playgroud)

(我从这个来源增强了这一点:https : //stackoverflow.com/a/9635153/1069083

一定要在http你的块内的最后添加这个/etc/nginx/conf.d/*.conf;

include /etc/nginx/sites-enabled/*.conf; 
Run Code Online (Sandbox Code Playgroud)

注意:server块外的注释被切到每个文件的底部,所以在server块之前不应该有注释。将第一行中的注释移到块内,例如:

 # don't put comments here
 server {
    # put your comments about domain xyz.org here
    listen 80;
    server_name xyz.org;
    ...
Run Code Online (Sandbox Code Playgroud)