如果一台服务器安装了nginx和apache,我如何找出它在其网站上使用的是哪一个?
我们有很多服务器和vhost,其中一些使用nignx,一些使用httpd或apache作为其域。我想写一个ansible脚本,将vhost用于其站点的web服务器上的信息提取出来,问题是很多服务器都安装了所有3台web服务器,但只有一台用于运行站点,其他服务器可能处于活动状态如果一台服务器安装了nginx和apache,我如何找出它在其网站上使用的是哪一个?,apache,nginx,scripting,ansible,Apache,Nginx,Scripting,Ansible,我们有很多服务器和vhost,其中一些使用nignx,一些使用httpd或apache作为其域。我想写一个ansible脚本,将vhost用于其站点的web服务器上的信息提取出来,问题是很多服务器都安装了所有3台web服务器,但只有一台用于运行站点,其他服务器可能处于活动状态 我的意思是,我甚至不知道从哪里开始。一个简单的bash脚本示例可以准确地输出vhost的web服务器。检查端口80或443,哪个进程正在使用它们,如何: sudo netstat -ntlp | grep '0.0.0.0
我的意思是,我甚至不知道从哪里开始。一个简单的bash脚本示例可以准确地输出vhost的web服务器。检查端口80或443,哪个进程正在使用它们,如何:
sudo netstat -ntlp | grep '0.0.0.0:80' | awk '{print $7}'
对于端口443:
sudo netstat -ntlp | grep '0.0.0.0:443' | awk '{print $7}'
输出将是以下行之一:
xx/httpd # for apache
xx/nginx # for nginx
您可以编写一个ansible任务来运行这个cmdQ:如果服务器安装了nginx和apache,我如何找出哪个用于网站
答:给定一个网站,我们知道IP地址和端口。那么问题是:在www_ip主机和www_端口上运行的是什么守护进程
让我们使用lsof并打印列表中的第一项。下面的播放是nginx在8080端口监听的示例
- hosts: www_ip
vars:
www_port: 8080
tasks:
- shell: "lsof -i :{{ www_port }}|
grep LISTEN|
cut -d ' ' -f 1"
register: result
- debug:
msg: "{{ result.stdout_lines|first }}"
给予
注释
此解决方案适用于Linux。
许多其他的想法和评论可以在
我确实喜欢这种想法!是的,应该有用。但是我必须检查这两个端口吗?这取决于你是否使用https,但是你可以使用这两个命令,如果没有监听端口443,它将不会打印任何内容。sudo netstat-ntlp帮助我你可以使用awk进行过滤,也许你应该在端口后添加一个单词边界分隔符。另外,您可能需要列出IPv6:sudo netstat-ntlp | awk'$4~/0.0.0 |:::80 | 443\>/{print$7}`````-hosts:vm2 vars:www|u port:80 been:yes tasks:-shell:lsof-i:{{www|u port}}grep LISTEN d{d'-f1 register:result-debug:msg={result.stdout}u-lines}第一个对我有效,我不知道你为什么使用8080端口我使用8080端口只是为了说明这种可能性。您是对的http默认端口是80。
ok: [www_ip] => {
"msg": "nginx"
}