反向代理无法访问laravelS

反向代理无法访问laravelS
我在 php 容器中安装 laravels,开启服务在 5200 端口,容器内访问没有问题,
现在我通过 nginx 反向代理配置让访问 80 时宿主机通过 nginx 转发到 php 容器,我的 nginx 配置如下下

upstream swoole {
    server 172.21.0.5:5200 weight=5 max_fails=3 fail_timeout=30s;
    keepalive 16;
}

server {
    listen 80;
    listen [::]:80;
    server_name localhost;
    root /www/laravel/public/;
    index index.php index.html;

    location / {
        try_files $uri @laravels;
    }

    location @laravels {
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header Server-Protocol $server_protocol;
        proxy_set_header Server-Name $server_name;
        proxy_set_header Server-Addr $server_addr;
        proxy_set_header Server-Port $server_port;
        proxy_pass http://swoole;
    }
}

其中 172.21.0.5 是我 php 容器的 ip 地址

反向代理无法访问laravelS

但是我 nginx 访问之后给我报错

反向代理无法访问laravelS

提示的是连接拒绝,我想可能 ip 直接访问的方式可能有问题,所以我 php 容器又映射了 5200 端口到宿主机

反向代理无法访问laravelS
然后我把直接访问容器 ip 改为 127.0.0.1

反向代理无法访问laravelS
然后重启 nginx

反向代理无法访问laravelS
发现 127.0.0.1 映射端口也给拒绝了,这该怎么办呢

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

大哥们我解决了,是因为 laravels 服务监听默认是 127.0.0.1,要改配置的,所以外部访问不了就是因为这个原因

3年前 评论
讨论数量: 11

你这样请求的是公网 ip

3年前 评论
aab

host.docker.internal 可以解决在 docker 内部访问宿主机的问题

3年前 评论

因为你的服务只监听在 127.0.0.1 上

3年前 评论

和反向代理无关吧,首先得能容器外访问容器,容器的端口是怎么映射的?

3年前 评论
晏南风 (楼主) 3年前
php_yt (作者) 3年前

看你贴的报错,我猜 nginx 跟 php-fpm 不是在同一个容器网络下吧

如果是这样,nginx 只能通过主机 ip 来访问 php-fpm 服务了

如果要通主机 ip 来访问容器服务,主机端口和容器端口需要做下映射

下面是启动容器映射端口的例子,8000 是主机端口,8080 是容器端口

docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0

这样很很麻烦

更简单的做法

nginx 和 php-fpm 在同一容器网络之下,直接可以通过容器名访问

3年前 评论

大哥们我解决了,是因为 laravels 服务监听默认是 127.0.0.1,要改配置的,所以外部访问不了就是因为这个原因

3年前 评论

了解下 0.0.0.0127.0.0.1 的区别。

3年前 评论
晏南风 (楼主) 3年前

proxy_pass swoole; 这个配置好像也不对吧

3年前 评论