Я пытаюсь настроить php webapp, используя docker. Идея состоит в том, чтобы запустить приложение php-fpm
в автономном контейнере и иметь другой контейнер для запуска nginx. Идея этой настройки заключается в том, чтобы использовать тот же контейнер nginx для прокси-запросов к другим веб-приложениям, которые уже работают на той же машине. Проблема в том, что я не могу nginx
правильно обработать статические файлы (js, css и т. Д.), Поскольку запросы к ним продолжают поступать fpm
.
Вот как выглядит файловая система:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
Я использую все, Makefile
что выглядит следующим образом (не заинтересовано в docker-compose
этом):
PWD:=$(shell pwd)
CONFIG:='/config'
WEBAPP:='/webapp'
run: | run-network run-webapp run-nginx
run-network:
docker network create internal-net
run-webapp:
docker run --rm \
--name=webapp \
--net=internal-net \
--volume=$(PWD)$(WEBAPP):/var/www/webapp:ro \
-p 9000:9000 \
php:5.6.22-fpm-alpine
run-nginx:
docker run --rm \
--name=nginx \
--net=internal-net \
--volume=$(PWD)$(CONFIG)/webapp.conf:/etc/nginx/conf.d/webapp.domain.com.conf:ro \
-p 80:80 \
nginx:1.11.0-alpine
Вот как config/webapp.conf
выглядит моя .
server {
listen 80;
server_name webapp.domain.com;
# This is where the index.php file is located in the webapp container
# This folder will contain an index.php file and some static files that should be accessed directly
root /var/www/webapp/web;
location / {
try_files $uri $uri/ @webapp;
}
location @webapp {
rewrite ^(.*)$ /index.php$1 last;
}
location ~ ^/index\.php(/|$) {
include fastcgi_params;
fastcgi_pass webapp:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
Любое действие, которое необходимо обработать с использованием этого index.php
файла, будет работать. Тем не менее, статические файлы не будут обслуживаться, что приведет к неприятным 404
ошибкам (так как в веб-приложении php для них не настроены маршруты). Я полагаю, что nginx пытается загрузить их из собственной файловой системы контейнера, когда они на самом деле находятся в webapp
контейнере, возвращаясь обратно @webapp
.
Есть ли способ, который я могу настроить nginx
для обслуживания тех файлов, которые находятся в другом контейнере?
nginx
файлы запросов в приложении php, я использую прокси fpm
для этого, и мне нужен nginx
доступ к статическим файлам не-php.
webapp
контейнере, а не в nginx
одном.