Рейтинг:0

Docker + Symfony + Nginx + PHP 8.1 плохой шлюз настроить php для Nginx

флаг cn

Я пытаюсь получить доступ к моему приложению Symfony через настройку компоновки докеров

у меня проблемы с nginx default.conf При попытке доступа к приложению я получаю плохой шлюз

журналы докера показывают ошибку:

не определен преобразователь для разрешения приложения, клиент: 193.32.126.216

поэтому я попытался поставить 127.0.0.1:9000 вместо приложение:9000 и я получаю новую ошибку:

connect () не удалось (111: соединение отклонено) при подключении к восходящему каналу

У меня есть эта конфигурация:

версия: "3"
Сервисы:

нгинкс:
  имя_контейнера: nginx
  изображение: "${NGINX_IMAGE}"
  сборка: сборка/nginx
  перезапуск: всегда
  env_file: .env
  порты:
    # - "8000:443"
    - "80:80"
    - "443:443"
  тома:
    - "${APP_HOST_DIR}/public:/var/www/app/public:ro"
    - "${APP_HOST_LETSENCRYPT}:${APP_CONTAINER_LETSENCRYPT}"
    - "${APP_HOST_NGINX_CONF}:${APP_CONTAINER_NGINX_CONF}"
  тома_из:
    - приложение
  сети:
    - центральный_мр
  зависит от:
    - приложение

приложение:
  имя_контейнера: приложение
  изображение: "${APP_IMAGE}"
  перезапуск: всегда
  сборка: сборка/приложение
  env_file: .env
  сети:
    - центральный_мр
  тома:
    - "${APP_HOST_DIR}:${APP_CONTAINER_DIR}"


  сети:
    центральный_господин:

.env

# ПРОД
РЕЖИМ = продукт

# КАРТИНКИ
NGINX_IMAGE=мр/nginx:продукт
MARIADB_VERSION=последняя
APP_IMAGE=мистер/приложение:продукт

# ПРИЛОЖЕНИЕ
APP_HOST_DIR=./приложение
APP_CONTAINER_DIR=/var/www/приложение/

# МАРИАДБ
MARIADB_DATA_DIR=/var/lib/mysql
MARIADB_LOG_DIR=/var/журналы/mysql
SQL_INIT=./сборка/база данных/продукт

MYSQL_DATABASE = приложение
MYSQL_USER=приложение
MYSQL_PASSWORD=пароль
MYSQL_ROOT_PASSWORD=пароль

APP_HOST_NGINX_CONF=./volume/etc/nginx/prod/default.conf
APP_CONTAINER_NGINX_CONF=/etc/nginx/conf.d/default.conf

# НГИНКС
APP_HOST_NGINX_CONF=./volume/etc/nginx/prod/default.conf
APP_CONTAINER_NGINX_CONF=/etc/nginx/conf.d/default.conf

# SSL
APP_HOST_LETSENCRYPT=/etc/letsencrypt/
APP_CONTAINER_LETSENCRYPT=/etc/letsencrypt/

default.conf

сервер {

слушать [::]:443 ssl; 
слушать 443 ssl; 
ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; 
ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; 
включить /etc/letsencrypt/options-ssl-nginx.conf; 
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
корень /var/www/app/public/;
индекс index.php;
имя_сервера mywebsite.com; 


расположение ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    установить приложение $upstream:9000;
    fastcgi_pass $ вверх по течению; 
    fastcgi_index index.php;
}
}

фд

Рейтинг:0
флаг gr

Do you really need to specify your upstream name using the variable? This trick usually used when your backend can be unavailable or down when the nginx container starts; some more details can be found in this article. If it isn't your case, you can use the container name directly:

fastcgi_pass app:9000;

If it is really your case after all, you can define a resolver using internal docker-compose container-to-IP resolving system:

resolver 127.0.0.11;

or better move your upstream declaration to the separate upstream block and go on without and additional resolver needed to be defined:

upstream webapp {
    server app:9000;
}
server {
    ...
    location ~ \.php$ {
        try_files $uri =404;
        set $upstream webapp;
        fastcgi_pass $upstream; 
    }
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.