#php #docker #nginx #arm
#php #docker #nginx #arm
Вопрос:
Я работаю над своим raspbberry pi (архитектура arm) и использую docker для запуска контейнеров на очень легкой ОС (HyperiotOS). Я успешно установил в контейнере nginx php-fpm, что конфигурация nginx обслуживает php-файл, если том смонтирован с кодом в обоих контейнерах.
Теперь моя проблема в следующем: я пытаюсь настроить nginx в значительной степени как обратный прокси, то есть я не хочу, чтобы nginx получал доступ к какому-либо коду на диске, я хотел бы пересылать все запросы в php контейнер и отображать результаты. Я попробовал proxy_pass к нему, но это не сработало. Есть ли способ сделать это? Пример кода ниже.
Мой docker compose:
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 info.
Эта конфигурация работает хорошо, и после доступа к raspberry.local: 8080 я могу увидеть информационную страницу php.
Однако, чтобы получить к нему доступ, у меня есть этот / code, смонтированный в контейнере nginx.
- ./code:/code # this is what I want to get rid off
Теперь я хочу устранить это, чтобы я мог поместить nginx в качестве балансировщика где-нибудь еще без необходимости доступа к коду. Я хотел бы передавать запросы напрямую в php-контейнер. Я попробовал proxy_pass http://php:9000 но это сломало дело. Каков наилучший способ «отсоединить» nginx от кода и просто действовать как автономный прокси? Есть несколько причин, по которым это следует устранить, если это возможно, одна из них — сборка производственного типа. Я не могу предоставить общий доступ к папке, в которой он должен быть загружен. Я не хочу, чтобы два контейнера содержали код. Я мог бы просто вставить apache в контейнер php и прокси nginx внутри, если это было бы так, и исключить fpm.