Estoy tratando de configurar una aplicación web php usando docker. La idea es ejecutar la aplicación usando php-fpmun contenedor independiente y tener otro contenedor que ejecute nginx. La idea para esta configuración es usar ese mismo contenedor nginx para enviar solicitudes de proxy a otras aplicaciones web que ya están trabajando en la misma máquina. El problema es que no puedo nginxprocesar correctamente los archivos estáticos (js, css, etc.), ya que las solicitudes a esos continúan fpm.
Así es como se ve el sistema de archivos:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
Estoy ejecutando todo usando un Makefileaspecto similar a este (no estoy interesado en docker-composeesto):
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
Así es config/webapp.confcomo se ve mi .
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;
}
}
Cualquier acción que necesite procesarse usando ese index.phparchivo funcionará. Sin embargo, los archivos estáticos no se servirán, lo que provocará 404errores desagradables (ya que la aplicación web php realmente no tiene rutas configuradas para esos). Creo que nginx intenta cargarlos desde su propio sistema de archivos contenedor, cuando realmente están en el webappcontenedor, fallando nuevamente @webapp.
¿Hay alguna forma de configurarlo nginxpara servir esos archivos que residen en otro contenedor?
nginxarchivos de solicitud dentro de la aplicación php, estoy prox fpmpara hacerlo y necesito nginxacceder a archivos estáticos no php.
webappcontenedor, no en el nginxuno.