Saya mencoba mengkonfigurasi webapp php menggunakan buruh pelabuhan. Idenya adalah menjalankan aplikasi menggunakan php-fpm
wadah mandiri dan memiliki wadah lain yang akan menjalankan nginx. Gagasan untuk pengaturan ini adalah menggunakan wadah nginx yang sama untuk permintaan proxy ke webapps lain yang sudah bekerja pada mesin yang sama. Masalahnya adalah bahwa saya tidak dapat nginx
memproses file statis dengan benar (js, css, dll.), Karena permintaan kepada mereka terus berlanjut fpm
.
Seperti apa sistem file itu:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
Saya menjalankan semuanya menggunakan Makefile
yang terlihat seperti ini (tidak tertarik docker-compose
untuk ini):
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
Seperti inilah config/webapp.conf
penampilan saya .
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;
}
}
Tindakan apa pun yang perlu diproses menggunakan index.php
file itu akan berhasil. Namun, file statis tidak akan disajikan, menghasilkan 404
kesalahan buruk (karena php webapp tidak benar-benar memiliki rute yang dikonfigurasi untuk itu). Saya percaya nginx mencoba memuatnya dari filesystem containernya sendiri, ketika mereka benar-benar ada di dalam webapp
container, gagal kembali @webapp
.
Apakah ada cara yang bisa saya konfigurasi nginx
untuk melayani file-file yang berada di wadah lain?
nginx
file permintaan dalam aplikasi php, saya sedang proksi fpm
untuk melakukannya dan saya perlu nginx
mengakses file non-php statis.
webapp
wadah, bukan dalam nginx
satu.