如何使用多个php fpm docker容器设置单个nginx服务器
Nginx正在我的服务器(不是docker映像)上运行,以将子域请求代理到我的docker容器 为每个图像添加一个额外的nginx容器的工作原理如下: docker-compose.yml如何使用多个php fpm docker容器设置单个nginx服务器,php,docker,nginx,Php,Docker,Nginx,Nginx正在我的服务器(不是docker映像)上运行,以将子域请求代理到我的docker容器 为每个图像添加一个额外的nginx容器的工作原理如下: docker-compose.yml version: '2' services: nginx: image: nginx:latest ports: - "8080:80" volumes: - .:/app
version: '2'
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- .:/app
- ./site.conf:/etc/nginx/conf.d/default.conf
networks:
- code-network
php:
image: php:fpm
volumes:
- .:/app
networks:
- code-network
networks:
code-network:
driver: bridge
fastcgi_param SCRIPT_FILENAME /app$fastcgi_script_name;
site.conf
server {
listen 80;
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /app;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
/etc/nginx/sites available/dev.domain.co.uk
server {
listen 80;
listen [::]:80;
server_name dev.domain.co.uk;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
但是为每个php站点增加一个nginx实例似乎是浪费
如何将nginx的服务器实例直接路由到每个php:fpm容器
注意:docker'code network'在docker compose up-d解决了这个问题后被重命名为appname code network
在nginx服务器配置中,root是服务器主机上代码的位置,即/home/user/code/site
fastcgi_参数是代码在Docker容器(/app)上的位置,如Docker-compose.yml中所定义
version: '2'
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- .:/app
- ./site.conf:/etc/nginx/conf.d/default.conf
networks:
- code-network
php:
image: php:fpm
volumes:
- .:/app
networks:
- code-network
networks:
code-network:
driver: bridge
fastcgi_param SCRIPT_FILENAME /app$fastcgi_script_name;
您还需要传递到docker容器主机ip:
fastcgi_pass 172.21.0.2:9000;
正如hostname-I在容器上使用bash时发现的那样
我还没有发现如何使用容器主机名来代理多个php fpm docker实例,您需要为每个php实例提供一个唯一的别名,然后在服务器配置中引用该别名 例如: 在docker-compose.yml文件中(请参见“别名”部分中的
php1
):
然后在site.conf中使用fastcgi_pass php1:9000代码>参见php1
给每个php容器实例一个唯一的别名,允许您在同一主机上使用单个nginx容器运行不同的php设置(版本等)
希望它有意义