Cor*_*ore 30 linux shell nginx
是否有命令列出在CentOS上运行在nginx下的所有vhost或服务器?我想将结果通过管道传输到文本文件以进行报告.
我正在寻找类似于我用于Apache的这个命令的东西:
apachectl -S 2>&1 | grep'port 80'
Ale*_*sio 58
从版本1.9.2开始,您可以:
nginx -T
Run Code Online (Sandbox Code Playgroud)
显示完整的nginx配置
nginx -T | grep "server_name " #include the whitespace to exclude non relevant results
Run Code Online (Sandbox Code Playgroud)
显示所有服务器名称
Mar*_*ner 27
更新: 感谢@Putnik指出一种更简单的方法(但我更喜欢只列出网站启用):
grep server_name /etc/nginx/sites-enabled/* -RiI
Run Code Online (Sandbox Code Playgroud)
旧帖子:
尝试这样的事情:
find /etc/nginx/sites-enabled/ -type f -print0 | xargs -0 egrep '^(\s|\t)*server_name'
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
Ant*_*ggs 21
到目前为止的答案是有效的,除非你有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
Run Code Online (Sandbox Code Playgroud)
由于它很长而且是\
-y,我将包括每行的快速解释.
\n
没有前面的;
,{
或}
有空间.这需要使用sed的怪人:a;N;$!ba;
抓取整个文件技巧,并进行一些分组,以便我们可以将最后一个字符放回去\1
,加上一堆额外的反斜杠以获得好运.server_name
行,通过一些额外的检查来删除nginx变量($foo
)并且只包含有效域(即不包括localhost
和_
).server_name
部分.xargs -L1
删除顶部的单个空白行.请注意,这里有一些技术上是加倍的,但我希望尽可能清晰和健壮.不过,欢迎提出改进建议.
除了所有其他出色的解决方案,如果您只需要每行一个所有名称的简单列表,例如:
example.com
my.example.com
etc.com
Run Code Online (Sandbox Code Playgroud)
解析配置。获取所有行server_name
。删除server_name
。最后每行放一个域。
sudo nginx -T | grep "server_name " | sed 's/.*server_name \(.*\);/\1/' | sed 's/ /\n/'
Run Code Online (Sandbox Code Playgroud)
@anthony-briggs正确地指出,如果您的server_name ... ;
声明分布在多行中,则此处给出的大多数其他答案将不起作用。
但是,如果您能负担得起聘请翻译的奢侈费用perl
,您可以将他的解决方案缩短为以下这段话:
nginx -T | perl -ln0777e '$,=$\; s/^\s*#.*\n//mg; print grep !$u{$_}++ && !m/^_$/, map m/(\S+)/g, m/\bserver_name\s++(.*?)\s*;/sg'
Run Code Online (Sandbox Code Playgroud)
分块:
perl -l -n -0777 -e
Run Code Online (Sandbox Code Playgroud)
-l
:使print
命令以换行符终止其输出;
它还会导致在读取时从每个输入记录中删除尾随换行符,但这不会打扰我们,因为我们:
-n -0777
$_
:一次性将所有输入放入(一条记录);
-e
:简单地执行下一个参数作为 Perl 源;
$, = $\ ;
Run Code Online (Sandbox Code Playgroud)
使print
命令还在每个参数之间输出换行符;
s/^\s*#.*\n//mg ;
Run Code Online (Sandbox Code Playgroud)
删除所有评论;
忽略前导空格,假定注释从行开始一直到行尾(.
此处与换行符不匹配);
m/\bserver_name\s++(.*?)\s*;/sg
Run Code Online (Sandbox Code Playgroud)
生成所有server_name ... ;
声明之间的所有内容(此处.
与换行符匹配);
...全部map
-ped 为:
map m/(\S+)/g,
Run Code Online (Sandbox Code Playgroud)
...这将只留下连续的非空白块;
...然后将其grep
-ped 以获得唯一性,而不是特殊的“ _
”服务器名称,
grep !$u{$_}++ && !m/^_$/,
Run Code Online (Sandbox Code Playgroud)
...和print
-ed(未排序)。
归档时间: |
|
查看次数: |
46840 次 |
最近记录: |