![符号链接不适用于 nginx、php-fpm 和 docker](https://linux22.com/image/212561/%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%20nginx%E3%80%81php-fpm%20%E5%92%8C%20docker.png)
我在本地使用 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容器中,符号链接指向的硬链接确实不存在