Tôi đang cố gắng cấu hình một ứng dụng web php bằng docker. Ý tưởng là để chạy ứng dụng bằng cách sử dụng php-fpmtrong một container độc lập và có một container khác sẽ chạy nginx. Ý tưởng cho thiết lập này là sử dụng cùng một thùng chứa nginx cho các yêu cầu proxy đến các ứng dụng web khác đang hoạt động trên cùng một máy. Vấn đề là tôi không thể nginxxử lý đúng các tệp tĩnh (js, css, v.v.), như các yêu cầu cho những người tiếp tục fpm.
Đây là những gì hệ thống tập tin trông giống như:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
Tôi đang chạy toàn bộ bằng cách sử dụng một Makefilecái trông như thế này (không quan tâm đến docker-composecái này):
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
Đây là những gì tôi config/webapp.conftrông giống như.
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;
}
}
Bất cứ hành động nào cần được xử lý bằng index.phptệp đó sẽ hoạt động. Tuy nhiên, các tệp tĩnh sẽ không được cung cấp, dẫn đến các 404lỗi khó chịu (vì ứng dụng web php không thực sự có các tuyến được định cấu hình cho các tệp đó). Tôi tin rằng nginx cố tải những thứ đó từ hệ thống tập tin chứa của chính nó, khi chúng thực sự nằm trong webappcontainer, không quay trở lại @webapp.
Có cách nào tôi có thể định cấu hình nginxđể phục vụ các tệp nằm trong vùng chứa khác không?
nginxcác tệp yêu cầu trong ứng dụng php, tôi ủy quyền fpmđể làm như vậy và tôi cần nginxphải truy cập các tệp không phải là php tĩnh.
webappcontainer chứ không phải trong nginxmột khối.