在搭建或迁移服务器的过程中经常会遇到“curl: (7) Failed connect to xxx 拒绝连接/Connection refused”,比如以下场景,哪怕是关了防火墙还是没法解决问题。
[root@xubingtao svn]# curl http://localhost:3380
curl: (7) Failed connect to localhost:3380; Connection refused
[root@xubingtao svn]# curl http://svn:3380
curl: (6) Could not resolve host: svn; 未知的错误
[root@xubingtao svn]# curl http://172.17.0.5:3380
curl: (7) Failed connect to 172.17.0.5:3380; 拒绝连接
[root@xubingtao ~]# systemctl stop firewalld
[root@xubingtao ~]# curl http://172.17.0.5:3380/repos
curl: (7) Failed connect to 172.17.0.5:3380; 拒绝连接
[root@xubingtao ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
[root@xubingtao ~]# reboot
造成以上问题有很多原因,下面列出一些常见的原因并给出相应解决方案。
原因一,可以能由于访问URL/URI/地址/路径不对。比如IP不对,比如容器内的IP只能在容器内或相同网段容器间访问,纠正IP即可;比如端口不对,纠正端口即可;比如没加具体uri,比如docker中自定义的“hostname”只能在容器内或相同网端容器间访问,纠正uri即可;等等。
原因二,不在相同网段。在局域网内不同网段是没法互相访问的,改到相同网段即可。docker中建议创建自定义网络(docker network create 网络名称)来统一管理容器并把容器设置为自动重启(–restart=always)这样重启docker就会自动重启容器也不会有IP冲突问题,通过“docker network connect 网络名称 容器名称”将容器连接到自定义网络,通过“docker network disconnect 网络名称 容器名称”命令断开自定义网络,然后用“docker exec -it 容器名/ID bash”或“docker exec -it 容器名/ID sh”进入容器中“ping IP/hostname”来调试网络是否通畅。
原因三,配置不对。比如使用nginx做代理但是没写对配置信息,比如IP及端口没写对,比如不在相同网段不能用hostname访问,等等。
原因四,防火墙拦截。服务器通常会有很多层网络,最外层应当尽量减少开放端口,里面的可以放开必要的端口,最内层其实可以闭关防火墙,具体操作如下,这里的Linux服务器以centos为例。
查看防火墙状态:systemctl status firewalld
开启防火墙 :systemctl start firewalld
设置开机时启用防火墙服务:systemctl enable firewalld.service
停止防火墙:systemctl stop firewalld
禁用防火墙:systemctl disable firewalld.service
永久开放指定端口:firewall-cmd --zone=public --add-port=8080/tcp --permanent
永久关闭指定端口: firewall-cmd --zone=public --remove-port=8080/tcp --permanent
重启防火墙:firewall-cmd --reload
查看所有开放端口:firewall-cmd --list-all
查看某个端口是否开放: firewall-cmd --query-port=8080/tcp
原因五,可能由于没有权限。比如文件在不同环境共享使用,而各自环境的用户角色权限又不同就可能会有权限问题,可以在原始环境就行修改,然后通过包含所有信息复制的方式进行拷贝(Linux中用“cp -a 原文件路径 新路径”,docker用“docker cp -a 容器名:路径 新路径”)。
原因六,平台限制。比如几乎所有平台都封锁25邮件端口,有的会通过条件申请允许使用。
等等。
遇到这种问题,先查看日志查找具体原因,然后参考上面的分析进行相应处理,另外迁移服务器应当备份保存好旧服务器,不要随便删除启动不了的旧应用,可以启用新的应用或环境来调试运行旧应用,逐步过渡以免丢失数据。
展开阅读全文