Я настраиваю контейнер докера nginx в качестве обратного прокси для php-fpm.Это вообще возможно? - PullRequest
2 голосов
/ 04 апреля 2019

Я работаю над своей raspbberry pi (arm arm) и использую docker для запуска контейнеров на очень легкой ОС (HyperiotOS). Я успешно установил контейнер nginx + php-fpm, чтобы конфигурация nginx обслуживала файл php, если том смонтирован с кодом в обоих контейнерах.

Теперь моя проблема: я пытаюсь установить nginx в качестве обратного прокси-сервера, то есть я не хочу, чтобы nginx обращался к какому-либо коду на диске, я хотел бы перенаправлять все запросы в php-контейнер и отображать результаты. Я попытался proxy_pass к нему, но это не сработало. Есть способ сделать это ? Пример кода ниже.

Мой докер:

version: '3'
services:
  nginx:
    image: arm32v7/nginx:latest
    container_name: nginx
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./conf.d:/etc/nginx/conf.d
      - ./logs:/var/log/nginx/
      - ./code:/code # this is what I want to get rid off
    networks:
      - webserver
  php:
    image: arm32v7/php:7.3-fpm
    expose:
      - "9000"
    restart: unless-stopped
    container_name: php-fpm
    volumes:
      - ./code:/code
    networks:
      - webserver
networks:
  webserver:
    driver: bridge

Мой конфиг nginx:

server {
    listen 80;
    index index.php index.html;
    server_name raspberry.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /code;

    location ~ \.php$ {
        try_files $uri /dev/null =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;
    }
}

Теперь внутри папки / code у меня есть index.php с информацией php. Эта конфигурация работает хорошо, и после доступа к raspberry.local: 8080 я вижу страницу информации php.

Однако, чтобы получить к нему доступ, у меня / код смонтирован в контейнере nginx.

- ./code:/code # this is what I want to get rid off

Теперь я хочу устранить это, чтобы я мог поместить nginx в качестве балансировщика в другое место без необходимости доступа к коду. Я хотел бы прокси-запросы прямо в контейнер php. Я пробовал proxy_pass http://php:9000, но это не помогло. Каков наилучший способ «отсоединить» nginx от кода и просто действовать как автономный прокси? Есть несколько причин, по которым, если это возможно, можно устранить, одна из которых - сборка производственного типа. Я не могу поделиться папкой, в которой она должна быть запечена. Мне не нужны два контейнера с кодом. Я мог бы просто добавить Apache в контейнер php и прокси-сервер nginx внутри, если бы это было так, и устранить fpm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...