符号链接不适用于 nginx、php-fpm 和 docker

符号链接不适用于 nginx、php-fpm 和 docker

我在本地使用 docker 运行一个 WordPress 站点,在一个插件中,我发送了一个对 style.css 文件的 GET 请求,该文件是一个符号链接,但它不起作用,它回答了404 not found

我不认为问题出在 WordPress 方面,因为 GET uri 是正确的,并且在使用硬链接路径而不是符号链接时它可以工作

所以问题可能是 nginx、docker,或者可能是 nginx 中的 php-fpm 配置,我认为

到目前为止,我在 stackexchange 网站上找到了一些想法,但我尝试过但没有成功:

  • 在 nginx 设置中显式添加disable_symlinks off;,在三个上下文中:http、服务器、位置(在/位置和~ \.php$位置中)
  • 添加autoindex on;nginx、服务器和所有位置上下文
  • $document_root在nginx 中进行更改,$realpath_root如下所示:
    • fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
  • 并添加这两行:
    • fastcgi_param DOCUMENT_ROOT $realpath_root;
    • fastcgi_param PATH_TRANSLATED $realpath_root$fastcgi_script_name;
  • 授予硬链​​接和符号链接位置中的文件和文件夹的读取和执行权限
  • 将文件和文件夹的所有者更改为与有效的硬链接相同的所有者(我的 nginx 和 wordpress docker 位于两个容器中)

我不知道还能做什么?

要求 :

失败的 wordpress GET 请求(代码、请求和标头):

  • wp_enqueue_style('my_style', plugins_url('style.css', __FILE__));
  • https://localhost/wp-content/plugins/my_plugin/style.css
  • 标题:
GET https://localhost/wp-content/plugins/my_plugin/style.css?ver=6.0.3
Status 404 Not Found
Version HTTP/1.1
Transferred 294 B (146 B size)
Referrer Policy strict-origin-when-cross-origin

有效的 WordPress GET 请求(硬链接)(代码、请求和标头):

  • wp_enqueue_style('my_style', plugins_url( 'test_plugin/style.css', dirname(__FILE__) ));
  • https://localhost/wp-content/plugins/test_plugin/style.css
  • 标题:
GET https://localhost/wp-content/plugins/test_plugin/style.css?ver=6.0.3
Status 200 OK
Version HTTP/1.1
Transferred 548 B (318 B size)
Referrer Policy strict-origin-when-cross-origin

架构 :

                                 /
drwxr-xr-x  www-data:www-data    | home/
drwxr-xr-x  www-data:www-data    | | www-data
drwxr-xr-x  www-data:www-data    | | | my_plugin/
-rwxr-xr-x  www-data:www-data    | | | | index.php
-rwxr-xr-x  www-data:www-data    | | | | style.css
drwxr-xr-x  root:root            | var/
drwxr-xr-x  root:root            | | www/
drwxr-xr-x  www-data:www-data    | | | html/
drwxr-xr-x  www-data:www-data    | | | | wp-content/
drwxr-xr-x  www-data:www-data    | | | | | plugins/
lrwxrwxrwx  www-data:www-data    | | | | | | my_plugin/ -> /home/www-data/my_plugin
drwxr-xr-x  www-data:www-data    | | | | | | test_plugin/
-rwxr-xr-x  www-data:www-data    | | | | | | | style.css

答案1

我找到了解决方案,这是我的一个非常愚蠢的错误:

我忘记向 Nginx-Container 提供包含硬链接的卷!所以,在Nginx容器中,符号链接指向的硬链接确实不存在

相关内容