以下配置可正确提供WordPress实例。 (为简洁起见,省略了一些不相关的配置详细信息。)
docker-compose.yml
version: "3.7"
services:
nginx:
image: nginx:alpine
links:
- wordpress-1
volumes:
- wordpress-1_files:/var/www/html
wordpress-1:
image: wordpress:php7.3-fpm-alpine
volumes:
- wordpress-1_files:/var/www/html
volumes:
wordpress-1_files:
wordpress-1.conf
server {
server_name wordpress-1.com;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_pass wordpress-1:9000;
}
}
但是,我想将wordpress-1_files
卷挂载到/var/www/html/wordpress-1
容器中的子目录(nginx
)中(以便可以从同一个NGINX代理服务多个应用程序)。以下配置在响应正文中返回带有404
的{{1}}。下面的File not found.
中的两条SCRIPT_FILENAME
行中的任何一条都会发生此结果。
docker-compose.yml
wordpress-1.conf
wordpress-1.conf
version: "3.7"
services:
nginx:
image: nginx:alpine
links:
- wordpress-1
volumes:
- wordpress-1_files:/var/www/html/wordpress-1
wordpress-1:
image: wordpress:php7.3-fpm-alpine
volumes:
- wordpress-1_files:/var/www/html
volumes:
wordpress-1_files:
当我检查server {
server_name wordpress-1.com;
root /var/www/html/wordpress-1;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
# fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /var/www/html/wordpress-1$fastcgi_script_name;
fastcgi_pass wordpress-1:9000;
}
}
中的NGINX error_log
时,会看到以下内容:
在读取时在stderr中发送的FastCGI:“主脚本未知” 来自上游的响应标头,客户端:555.69.70.132,服务器: wordpress-1.com,请求:“ GET / HTTP / 1.1”,上游: “ fastcgi://172.18.0.3:9000”,主持人:“ wordpress-1.com”
这使我相信debug
存在问题,但是SCRIPT_FILENAME
和/var/www/html$fastcgi_script_name
似乎都不起作用。
问题:
在将/var/www/html/wordpress-1$fastcgi_script_name
容器中的WordPress卷挂载到/var/www/html
以外的其他目录时,如何调整第二对配置文件,以便为WordPress提供服务?
注意:上面的示例是我要解决的问题的简化示例,是最小示例。我正在从事的实际项目已经超过here。
答案 0 :(得分:0)
嗯,事实证明我的测试还不够彻底(尽管要花几天时间才能继续进行)。解决方案实际上是使用:
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
这是因为在wordpress:php7.3-fpm-alpine
图片的内部,这就是WordPress文件所在的路径。
在测试期间,我忘记了禁用位于暂存站点前面的CloudFlare的缓存。所以,我的测试并不总是在测试我认为的...