Nginx

nginx拆分大配置文件

  • February 12, 2020

我的 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 的路徑很奇怪試圖查找文件)?

您可能正在尋找 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 文件include*。

您可以使用創建站點文件夾

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

引用自:https://serverfault.com/questions/707955