我输入了一个 compose 文件,它像网络服务器一样运行 httpd, nginx 就像 httpd 的代理, 和 php-fpm 就像 *.php 文件解释器。
当我在浏览器上打开 localhost 时,我可以查看 /var/www/html 上的文件, 但是当我尝试打开任何 php 文件时, 我只看到 php 代码。
php-fpm 于 9000 启动, 我通过运行检查它
nmap -p 9000 php
从另一个 httpd 容器, 检查端口返回肯定消息。
我的 HTTPD conf 文件包含以下行:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://php:9000"
</FilesMatch>
我的自定义 httpd conf 文件:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://php:9000"
</FilesMatch>
<Directory "/var/www/html">
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
看到您的
docker-compose.yml
将会很有用。不过,这里有一个可用于入门的工作设置。我仅将此堆栈与两个服务一起使用:NGINX 和 PHP/FPM。
🗎
docker-compose.yml
services:
nginx:
image: nginx:1.25
container_name: nginx
ports:
- "80:80"
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
- ./app:/var/www/html
depends_on:
- php
php:
image: php:8.3-fpm
container_name: php
volumes:
- ./app:/var/www/html
使用以下卷安装:
./app:/var/www/html
上的 php
服务,以便 PHP/FPM 可以在 PHP 文件上运行;./app:/var/www/html
上的 nginx
服务用于提供静态文件;和./default.conf:/etc/nginx/conf.d/default.conf
用于 NGINX 配置的 nginx
服务。🗎
default.conf
server {
listen 80;
server_name localhost 127.0.0.1;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
这会建立一个从端口 80 到在端口 9000 上运行的 PHP 服务的反向代理。
├── app
│ ├── index.php
│ └── static.html
├── default.conf
└── docker-compose.yml
🗎
index.php
<?php
echo "Hello from PHP!";
🗎
static.html
<!DOCTYPE html>
<html>
<head>
<title>Static File</title>
</head>
<body>
<h1>Hello from a Static File!</h1>
</body>
</html>