如何解决Nginx反向代理不生效?

目录

背景

过程

日志

检查配置文件

重启服务

检查容器内的配置文件

容器和宿主机

其他


背景

用了两年的nginx新加的反向代理不生效

Docker挂载的配置文件启动的Nginx,配置一切正常,但是反向代理不生效,???先自查一波

过程

日志

按照常规排查思路,先查看日志

找到nginx的access.log和error.log两个日志文件,执行命令查看:tail -f  error.log。

检查配置文件

嗯,没什么报错,接下来,打开配置文件,检查下配置

执行nginx -t ,测试 Nginx 配置文件的语法是否正确,(docker中命令为docker exec -it nginx nginx -t )

(docker exec -it <container_name_or_id>:在指定的容器中执行命令, 后面是具体执行的命令)

当然,也没啥问题

重启服务

又试着不使用reload命令重启,关闭服务再打开,重启容器删除重建容器等方法,也没有效果

检查容器内的配置文件

是否挂载文件未生效

使用docker exec -it nginx bash命令,进入容器,查看了下配置文件,和挂载文件一致

容器和宿主机

确定的是nginx 本身是绝对没问题的,因为代理的静态文件是没有问题的,可以正常访问,这时候忽然想到一个问题,静态文件的映射是创建容器时指定了映射目录,新加的反向代理指向的地址是127.0.0.1:8089,是按照linux的配置来的,指向的地址是容器内部!

想到这里,霍然开朗。

修改nginx配置location指向地址

proxy_pass      http://127.0.0.1:8089/;
改为
proxy_pass      http://host.docker.internal:8089/;

这里,host.docker.internal是一个特殊的DNS名称,用于从Docker容器内部访问宿主机。 

最后,重启!

至此,关于Nginx反向代理不生效的问题排查结束

其他
  • 另一种方法是在Nginx配置中使用宿主机的实际IP地址作为代理的目标。
  • 虽然不推荐,但你可以通过启动容器时使用--net=host选项来让容器使用宿主机的网络栈。这样,容器内的服务就能像宿主机上的服务一样直接访问网络。但请注意,这样做会丧失Docker提供的网络隔离和安全性。

直接从Docker容器中的Nginx代理到宿主机上的端口通常不是一个好的做法。更好的解决方案是将所有相关服务都容器化,并通过Docker的网络功能进行通信。如果确实需要这样做,可能需要重新考虑应用架构或寻找其他替代方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值