阿里云服务器安装nginx踩坑-无法访问nginx

1,392 阅读2分钟

阿里云服务器安装nginx踩坑-部署成功后,却无法访问nginx

在阿里云轻量云服务器上安装docker后,按照教程即如下命令安装nginx

docker search nginx # 查找nginx镜像

docker pull nginx # 拉取nginx镜像

docker images  # 查看已有的本地镜像

docker run --name 容器别名 -p 8080:80 -d 镜像名称 # 创建并在后台运行nginx容器,同时将nginx的80端口映射至服务器的8080端口,-p指定映射端口,-P指定随机端口,-d代表容器在后台运行
docker ps # 查看容器列表

然后添加防火墙规则,即允许通过公网IP访问8080端口,浏览器中输入http://公网IP:8080访问nginx服务,发现并没有访问到默认的nginx服务器页面。开始排查原因:

  1. 检查防火墙状态
firewall-cmd --state # not running 并没有开启防火墙

防火墙应该是由阿里云防火墙的规则控制的,已经开启了8080的访问控制。

  1. 检查ip转发有没有打开
sysctl net.ipv4.ip_forward # 为1,代表打开了,为0代表关闭

显示为1,代表已经打开了

  1. 检查iptables是不是拦截了
service iptables stop # 关闭

尝试关闭报错了,显示没有load,代表没有开启拦截。

  1. 通过curl命令观察是否能在服务器和容器上访问到默认页面
docker exec -it 容器id bash # 进入容器内
curl http://localhost:8080 # 访问默认页面,返回成功
exit # 退出,容器交互式命令
curl http://localhost:8080 # 在服务器内访问,卡住无法访问

发现问题,在容器内可以访问,但是在服务器上无法访问,应该是端口映射没有起作用,虽然设置了映射,但是没有起作用,官网应该提前指出这个问题。除了很多资料,终于找到了文章 阿里云 ECS 的Docker为什么无法端口映射?,原来阿里云的内网eth0 网段正好跟Docker 的虚拟网卡都是 172 网段,有冲突。在/etc/docker/目录下,新增文件daemon.json,内容如下

{
  "bip": "192.168.1.5/24",
  "debug": true,
  "registry-mirrors": "https://fzxnxpz6.mirror.aliyuncs.com"]
}

其中bip 就是指明docker0的地址,然后重启docker服务,通过ifconfig命令观察docker0的内网地址是不是变成192开头,如果没有就重启服务器试试。如下图所示:

image-20220323220708273

此时在浏览器中通过http://公网IP:8080,终于访问成功了~