@HellWalk

Как nginx указать на php-fpm на другом докере?

Сделано два простых докера:

version: '3.3'

services:

    nginx:
        image: nginx:latest
        ports:
            - "6080:80"
            - "543:443"
        volumes:
            - ./nginx/core:/etc/nginx/conf.d
            - ./nginx/www:/var/www/
            - ./nginx/logs:/var/log/nginx/
            - ./nginx/html:/usr/share/nginx/html/
        links:
            - php

    php:
        build: ./php
        container_name: php-fpm
        volumes:
            - ./nginx/www:/var/www


Настройки nginx:
server {
    listen       80;
    server_name  localhost;

    access_log /var/log/nginx/default.log;
    error_log /var/log/nginx/default-error.log;

    location / {
        root   /var/www/site.loc;
        index  index.php index.html index.htm;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi_params;
    }
}


Если в дирректорию с локальным доменом положить html-файл - он отображается нормально, если .php - "502 Bad Gateway nginx/1.15.8"

И в логах nginx:
2019/01/23 07:57:21 [error] 9#9: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.24.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost:6080"


Ошибка, насколько понимаю в том, что nginx не видит php-fmp, который находится в другом докере. Как правильно настроить это?

P.S.
docker ps:
CONTAINER ID        IMAGE                      COMMAND                  CREATED              STATUS              PORTS                                                    NAMES
77071ee4b780        nanoninja/php-fpm:latest   "docker-php-entrypoi…"   About a minute ago   Up About a minute   9000/tcp                                                 docker_test3_php_1
dbe3d92b037f        nginx:latest               "nginx -g 'daemon of…"   39 minutes ago       Up 21 minutes       0.0.0.0:6080->80/tcp, 0.0.0.0:543->443/tcp               docker_test2_nginx_1
  • Вопрос задан
  • 5424 просмотра
Решения вопроса 3
ivankomolin
@ivankomolin
Вместо
fastcgi_pass 127.0.0.1:9000;
Указать
fastcgi_pass php:9000;

Ваша ошибка указывает на то, что nginx не может найти по адресу 127.0.0.1 php-fpm.
А происходит это потому, что адрес 127.0.0.1 это адрес внутри контейнера nginx, а php-fpm лежит за его пределами внутри другого контейнера.
Благодаря тому, что docker-compose по умолчанию создает сеть между контейнерами указанными в файле, то достучаться до сервиса можно по его имени из docker-compose.yml. В вашем случае это php
Ответ написан
@HellWalk Автор вопроса
Рабочий конфиг nginx оказался следующим:

server {
listen 80;
server_name localhost;

access_log /var/log/nginx/default.log;
error_log /var/log/nginx/default-error.log;

location / {
root /var/www/site.loc;
index index.php index.html index.htm;
}

location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/site.loc$fastcgi_script_name;
include fastcgi_params;
}
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@vaajnur
битриксоид
посмотри здесь как правильно настраивать сервер
phpjs.ru/2017/09/07/nginx-php-fpm-%D0%BD%D0%B0-vps...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы