CentOSのnginxで実行されているすべての仮想ホストまたはサーバーを一覧表示するコマンドはありますか?レポート作成のために、結果をテキストファイルにパイプで渡したいと思います。
私はApacheに使用するこのコマンドに似たものを探しています:
apachectl -S 2>&1 | grep 'ポート80'
更新:より簡単な方法を指摘してくれた@Putnikに感謝します(ただし、サイトが有効になっているサイトのみをリストすることを好みます)。
grep server_name /etc/nginx/sites-enabled/* -RiI
古い投稿:
次のようなものを試してください:
find /etc/nginx/sites-enabled/ -type f -print0 | xargs -0 egrep '^(\s|\t)*server_name'
お役に立てば幸いです!
バージョン1.9.2以降では、次のことができます。
nginx -T
完全なnginx設定を表示
nginx -T | grep "server_name " #include the whitespace to exclude non relevant results
すべてのサーバー名を表示します
これまでの答えはうまくいきますexceptserver_name
ディレクティブが複数行にわたって実行されている場合、黙って失敗します。また、人間が消費するために書かれているように見える(server_name_in_redirect off;
のような余分な行をピックアップする)ので、スクリプトに含めることはできません。
私はたくさんの仮想ホストを持っているので、スクリプト(sigh)で出力を使用したかったので、ここにもっと長いものがありますが、その目的に十分な堅牢性:
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
を使用して上部の単一の空白行を削除します。ここには技術的に倍になるいくつかのビットがあることに注意してください。ただし、改善の提案は歓迎します。
grep server_name /etc/nginx/* -RiI
@Haubixの答えよりも入力がずっと速い。追加 |grep -v "#"
オプション
他のすべての優れたソリューションに加えて、次のように、1行に1つのすべての名前の単純なリストが必要な場合:
example.com
my.example.com
etc.com
構成を解析します。 server_name
ですべての行を取得します。 server_name
を削除します。最後に、1行に1つのドメインを配置します。
Sudo nginx -T | grep "server_name " | sed 's/.*server_name \(.*\);/\1/' | sed 's/ /\n/'
以下を使用して、一度に1行ずつドメインをリストできます。
nginx_domains(){
domains=`find /etc/nginx/ -type f -name "*.conf" -print0 | xargs -0 egrep '^(\s|\t)*server_name' | sed -r 's/(.*server_name\s*|;)//g'`
for domain in $domains; do
echo $domain;
done
}