2 回答
TA贡献1804条经验 获得超3个赞
默认生成的配置nginx-proxy
不能完全工作。
VIRTUAL_ROOT
我认为环境变量搞砸了,因为问题的根源是 PHP 通过获取错误的路径SCRIPT_FILENAME
(这就是为什么你看不到 PHP 输出)并且没有try_files
with=404
符号(这就是为什么你得到 200 的所有内容)。
我在 GitHub 中准备了一个工作设置,docker-compose
以证明它可以与SCRIPT_FILENAME
nginx 配置中的现有设置一起使用。
我已经更改test.local
为test.localhost
.
我认为要让它正常工作,您必须使用 nginx 模板nginx-proxy
,因此生成的模板default.conf
确实可以与 php fpm 一起使用,并且包含缺少的 fastcgi 参数。
另一种不同的方法是将 PHP 和手动配置的 Web 服务器 (nginx) 打包在一个项目中,并在独立项目中拥有自动反向 nginx 代理。这将花费您运行额外的进程,但可以为您提供更多控制和更轻松的部署。
或者,您可能想看看traefik
哪个与 本质上相同nginx-proxy
。
TA贡献1859条经验 获得超6个赞
我使用 php-fpm 图像和 nginx 作为 php 站点的主堆栈。话虽如此,我不使用 nginx-proxy docker 镜像。相反,我在主机上使用普通 nginx,并将端口配置为指向后端 php-fpm docker 映像。
我也不使用 docker-compose 。因为它只是运行单个站点的 docker 容器,所以我不需要它。这是一个 docker run 命令示例:
docker rm -f www.example.com || true
docker run -itd -p 9001:9000 -P \
--name www.example.com \
--volume /var/www/html/www.example.com:/var/www/html/www.example.com \
--link mariadb:database.example.com \
--restart="always" \
--hostname="example.com" \
--log-opt max-size=2m \
--log-opt max-file=5 \
mck7/php-fpm:7.4.x-wordpress
这是一个 nginx 配置示例:
server {
server_name example.com www.example.com;
location ~ /.well-known {
allow all;
}
location ~ /\.ht {
deny all;
}
root /var/www/html/www.example.com/src;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
}
}
有关此设置的一些事情很关键。docker 容器的端口重新映射。在此示例中,我将端口 9001 映射到 9000。另一个“问题”是容器的根必须是主机上的实际位置。我不知道为什么会出现这种情况,但无论出于何种原因,docker 认为它使用的路径实际上也必须是主机上的路径。
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报