我有一个Docker Compose文件,其中包含一些基于PHP / FastCGI的Web应用程序,我想通过Nginx公开(总共3个容器)。如果两个Web应用程序容器将其静态文件存储在“/ var / www / html”中,如何让Nginx容器直接提供静态文件 ?
我根本无法找到这样做的方法,这意味着我必须让两个网络应用程序提供自己的静态文件。如果我无法更改应用程序代码,则需要从FastCGI移至HTTP(如此处所示)。
如果有办法在不同的路径上安装容器卷,这可能是可行的,就像您可以使用主机系统一样。有没有办法完成这样的事情,除了通过主机系统做到这一点?
答案 0 :(得分:3)
解决方案是将/var/www/html
文件夹直接挂载到nginx以使用serving static files的nginx功能。我还建议简单使用data-container将html文件夹挂载到所有3个容器。最终的docker-compose.yml看起来像这样:
nginx:
image: nginx
ports:
- 80:80
links:
- app1
- app2
volumes_from:
- html
app1:
image: [app1]
volumes_from:
- html
app2:
image: [app2]
volumes_from:
- html
html:
image: busybox
volumes:
- html:/var/www/html
并且nginx配置如下:
server {
root /var/www/html;
location / {
}
location ~ \.php {
fastcgi_pass localhost:8000;
...
}
location /images/ {
root /var/www/html/images;
}
location ~ \.(mp3|mp4) {
root /var/www/html;
}
}
以上配置将通过静态资源提供服务器/images
文件夹和任何mp3/mp4
文件。