バージョン 1.9.2 以降では、次のことができます:
nginx -T
完全な nginx 構成を表示
nginx -T | grep "server_name " #include the whitespace to exclude non relevant results
すべてのサーバー名を表示
grep server_name /etc/nginx/* -RiI
@Haubixの回答よりも入力がはるかに高速です.Add |grep -v "#"
オプションで
更新: もっと簡単な方法を指摘してくれた @Putnik に感謝します (ただし、サイト対応サイトのみをリストすることを好みます):
grep server_name /etc/nginx/sites-enabled/* -RiI
古い投稿:
次のようにしてみてください:
find /etc/nginx/sites-enabled/ -type f -print0 | xargs -0 egrep '^(\s|\t)*server_name'
お役に立てば幸いです!
を除いて、これまでの答えはうまくいきます server_name
がある場合 ディレクティブが複数行にわたって実行されると、黙って失敗します。また、それらは人間が消費するために書かれているようです (server_name_in_redirect off;
のような余分な行を拾います)。 ) したがって、それらをスクリプトに含めることはできません。
多くの仮想ホストがあり、出力をスクリプトで使用したいと考えていました (ため息 ) ですので、これはかなり長くなりますが、その目的のためには十分に堅牢でなければなりません:
nginx -T | sed -r -e 's/[ \t]*$//' -e 's/^[ \t]*//' -e 's/^#.*$//' -e 's/[ \t]*#.*$//' -e '/^$/d' | \
sed -e ':a;N;$!ba;s/\([^;\{\}]\)\n/\1 /g' | \
grep -P 'server_name[ \t]' | grep -v '\$' | grep '\.' | \
sed -r -e 's/(\S)[ \t]+(\S)/\1\n\2/g' -e 's/[\t ]//g' -e 's/;//' -e 's/server_name//' | \
sort | uniq | xargs -L1
長いので \
-y, 各行の簡単な説明を含めます.
\n
を置き換えます。 前の ;
なし 、 {
または }
スペース付き。これは sed の変人 :a;N;$!ba;
を使用する必要があります ファイル全体のトリックといくつかのグループ化を取得して、最後の文字を \1
で戻すことができるようにします 、幸運を祈る追加のバックスラッシュがたくさんあります。server_name
を取得できます 行、nginx 変数を削除するための追加チェック ($foo
)、有効なドメインのみを含めます (つまり、localhost
ではありません) と _
).server_name
を削除します。 一部。xargs -L1
を使用します 上部の 1 行の空白行を削除します。ここには、技術的に重要な部分がいくつかあることに注意してください。 倍増しますが、できるだけ明確で堅牢であることが好きです。ただし、改善のための提案は歓迎します。