Próbuję skonfigurować aplikację internetową php przy użyciu okna dokowanego. Chodzi o to, aby uruchomić aplikację php-fpm
w oddzielnym kontenerze i mieć inny kontener, który będzie działał nginx. Ideą tego ustawienia jest użycie tego samego kontenera nginx do przesyłania żądań proxy do innych aplikacji internetowych, które już działają na tym samym komputerze. Problem polega na tym, że nie mogę nginx
poprawnie przetworzyć plików statycznych (js, css itp.), Ponieważ żądania do nich wciąż się pojawiają fpm
.
Tak wygląda system plików:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
Korzystam z Makefile
tego, który wygląda tak (nie jestem tym zainteresowany 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
Tak config/webapp.conf
wygląda mój .
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;
}
}
Działa dowolne działanie, które musi zostać przetworzone przy użyciu tego index.php
pliku. Jednak pliki statyczne nie będą obsługiwane, co spowoduje nieprzyjemne 404
błędy (ponieważ aplikacja sieci web php tak naprawdę nie ma skonfigurowanych tras dla nich). Wierzę, że nginx próbuje załadować te pliki ze swojego własnego systemu plików kontenera, gdy faktycznie znajdują się w webapp
kontenerze, ale nie powracają do @webapp
.
Czy istnieje sposób, w jaki mogę skonfigurować nginx
obsługę plików znajdujących się w innym kontenerze?
nginx
plików żądań w aplikacji php, jestem fpm
do tego proxy i muszę nginx
uzyskać dostęp do statycznych plików innych niż php.
webapp
kontenerze, a nie w nginx
jednym.