Saya mencoba mengkonfigurasi webapp php menggunakan buruh pelabuhan. Idenya adalah menjalankan aplikasi menggunakan php-fpmwadah 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 nginxmemproses 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 Makefileyang terlihat seperti ini (tidak tertarik docker-composeuntuk 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.confpenampilan 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.phpfile itu akan berhasil. Namun, file statis tidak akan disajikan, menghasilkan 404kesalahan 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 webappcontainer, gagal kembali @webapp.
Apakah ada cara yang bisa saya konfigurasi nginxuntuk melayani file-file yang berada di wadah lain?
nginxfile permintaan dalam aplikasi php, saya sedang proksi fpmuntuk melakukannya dan saya perlu nginxmengakses file non-php statis.
webappwadah, bukan dalam nginxsatu.