Docker 通过php fpm容器中的容器化Nginx文件提供服务?
我的应用程序文件位于Docker 通过php fpm容器中的容器化Nginx文件提供服务?,docker,nginx,docker-compose,Docker,Nginx,Docker Compose,我的应用程序文件位于phpfpm容器中,我需要通过nginx提供它们。我希望避免在两个容器中装载相同的文件,因此我正在尝试找到一种方法,只从一个容器中提供它们,phpfpm。当我对其他容器使用反向代理时: 我收到带有以下错误日志记录的502坏网关错误: 1 recv()从上游读取响应头时失败(104:由对等方重置连接),客户端:172.18.0.1,服务器:myapp.test,请求:“GET/HTTP/1.1”,上游:,主机:“myapp.test” 我猜这是因为phpfpm容器不是HTTP服
phpfpm
容器中,我需要通过nginx
提供它们。我希望避免在两个容器中装载相同的文件,因此我正在尝试找到一种方法,只从一个容器中提供它们,phpfpm
。当我对其他容器使用反向代理时:
我收到带有以下错误日志记录的502坏网关错误:
1 recv()从上游读取响应头时失败(104:由对等方重置连接),客户端:172.18.0.1,服务器:myapp.test,请求:“GET/HTTP/1.1”,上游:,主机:“myapp.test”
我猜这是因为phpfpm
容器不是HTTP服务器
因此,或者,我尝试使用fastcgi\u pass
如下:
server {
listen 0.0.0.0:8080;
server_name myapp.test;
root /app;
location / {
try_files $uri $uri/index.php;
}
location ~ \.php$ {
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
它按预期提供*.php
文件,但不提供其他文件,即静态内容
如何使nginx
同时为.php
和我的phpfpm
容器中的静态文件提供服务
这是我的docker-compose.yml:
版本:“3.7”
服务:
phpfpm:
图片:“php fpm:7.3”
卷数:
-/站点:/app
端口:
- "9000:9000"
nginx:
图片:“nginx:1.17”
卷数:
-./nginx/app.conf:/opt/nginx/conf/nginx.conf
端口:
- "80:8080"
您有两个问题:
- 您没有将静态内容装载到Nginx容器中,因此无法提供服务。将此卷添加到容器中
- 您需要设置Nginx配置以提供此静态内容。你可以试试这个
我忘了在我的问题中提到,我开始修补它,正是因为我想避免两次装载相同的应用程序文件,我想只提供一个php fpm,在本例中是容器。但是,您的答案中提供的配置对我非常有用,因此我将对其进行升级!
server {
listen 0.0.0.0:8080;
server_name myapp.test;
root /app;
location / {
try_files $uri $uri/index.php;
}
location ~ \.php$ {
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
./site/public/:/var/www/html/public/:ro
server {
listen 0.0.0.0:8080;
server_name myapp.test;
root /var/www/html/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
}