web-dev-qa-db-ja.com

nginxは大きな構成ファイルを分割しました

Nginxのデフォルト設定ファイルが巨大になっています。それを小さな構成ファイルに分割し、各ファイルに最大4つの場所を1つだけ含めて、迅速に有効化/無効化できるようにしたいと思います。

実際のファイルは次のようになります。

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であることのように)ファイルを見つけようとします)?

19
oliverjkb

あなたはおそらく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.

27
FLXN

あなたはサイトフォルダを作成することができます

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/106908

Your/etc/nginx/conf.d/*.conf;httpブロック内の最後に必ず追加してください:

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