如何使用多个php fpm docker容器设置单个nginx服务器

如何使用多个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

Nginx正在我的服务器(不是docker映像)上运行,以将子域请求代理到我的docker容器

为每个图像添加一个额外的nginx容器的工作原理如下:

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;
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设置(版本等)

希望它有意义