GNU/Linux >> Linux の 問題 >  >> Linux

nginx ですべての仮想ホストを一覧表示するにはどうすればよいですか

バージョン 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, 各行の簡単な説明を含めます.

<オール>
  • nginx に構成全体を出力させ (どのファイルを含めるかを心配する必要がないように)、サニタイズします。先頭と末尾のスペース、コメント (末尾のものを含む)、空白行を削除します。
  • セミコロンまたは中括弧で終わらないすべての行は継続する必要があるため、\n を置き換えます。 前の ; なし 、 { または } スペース付き。これは sed の変人 :a;N;$!ba; を使用する必要があります ファイル全体のトリックといくつかのグループ化を取得して、最後の文字を \1 で戻すことができるようにします 、幸運を祈る追加のバックスラッシュがたくさんあります。
  • これで、各 server_name を取得できます 行、nginx 変数を削除するための追加チェック ($foo )、有効なドメインのみを含めます (つまり、localhost ではありません) と _ ).
  • 単語間のタブ/スペースはキャリッジ リターンに変換され、余分なスペース (念のため)、セミコロン、および server_name を削除します。 一部。
  • 最後に並べ替え、一意化し、xargs -L1 を使用します 上部の 1 行の空白行を削除します。
  • ここには、技術的に重要な部分がいくつかあることに注意してください。 倍増しますが、できるだけ明確で堅牢であることが好きです。ただし、改善のための提案は歓迎します。


    Linux
    1. Linuxにインストールされているすべてのパッケージを一覧表示する方法

    2. インストールされているすべてのPHP拡張機能を一覧表示する方法

    3. Linux グループ内のすべてのユーザーを一覧表示する方法は?

    1. Linux でロックされているすべてのユーザーを一覧表示するにはどうすればよいですか?

    2. Linux を使用して、テキスト内のスペルミスのあるすべての単語のリストを取得するにはどうすればよいですか?

    3. root を持つすべてのユーザーを一覧表示するにはどうすればよいですか?

    1. ファイルシステム上のすべてのハードリンクされたファイルを見つけるにはどうすればよいですか?

    2. すべての拡張属性とその方法を表示/リストできますか?

    3. 停止したすべてのジョブを強制終了するにはどうすればよいですか?