Php 在使用不同的nginx服务时,如何使用HTTP请求访问其他Docker容器?
我有两个不同的Docker容器(我们称它们为A和B),它们在同一个网络中(我们称之为AB_网络)。容器在不同的Php 在使用不同的nginx服务时,如何使用HTTP请求访问其他Docker容器?,php,docker,nginx,docker-compose,Php,Docker,Nginx,Docker Compose,我有两个不同的Docker容器(我们称它们为A和B),它们在同一个网络中(我们称之为AB_网络)。容器在不同的docker compose.yml文件中指定。两者都在运行自己的nginx(称之为NA和NB),它们也在同一个网络AB_NET中。如果我登录到A,我可以通过执行curl http://A:8081访问B,如果我登录到B,我可以通过执行curl http://B:8082访问A。但是如果我使用常规HTTP请求,我就无法从A到达B。我的猜测是,A的nginx无法将调用重定向到B(或者这是不
docker compose.yml
文件中指定。两者都在运行自己的nginx(称之为NA和NB),它们也在同一个网络AB_NET中。如果我登录到A,我可以通过执行curl http://A:8081访问B,如果我登录到B,我可以通过执行curl http://B:8082访问A。但是如果我使用常规HTTP请求,我就无法从A到达B。我的猜测是,A的nginx无法将调用重定向到B(或者这是不允许的)。我想做的是从B中读取一些数据,并在执行HTTP请求后将其显示在A中。我正在a中运行一个PHP应用程序,nginx.conf文件如下所示:
server {
index index.html index.php;
root /var/www/html/public/;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass A:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
我已尝试使用另一个位置扩展try\u文件
,并将代理权限传递给B:
server {
index index.html index.php;
root /var/www/html/public/;
location / {
try_files $uri $uri/ /index.php?$query_string @B;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass A:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location @B{
rewrite ^ / break;
proxy_pass http://B:8082;
}
}
从某种意义上说,我可以到达B,但请求永远不会发送回a。我只看到B的输出。但我希望它发送回a,在那里我可以处理它。我甚至不能再中断请求了,所以这似乎不正确。抱歉,这是我的错误,可能是Lumen(我使用的php框架)的问题。它可以工作,我只是在错误的地方搜索。你能稍微澄清一下设置吗?这听起来像是Docker networking的工作原理——
Docker exec A curl http://B:8082
成功地发出了一个常规的http请求——那么您能否显示失败的调用和收到的错误?Nginx安装核心是问题的核心还是解决问题的尝试?Lumen(我使用的php框架)由于任何原因都无法处理响应。如果我直接返回它,它会工作。对不起,我找错地方了。