laravel php artisan storage:link 后通过nginx代理访问图片404 not found问题

laravel php artisan storage:link 后通过nginx代理访问图片404 not found问题

文章目录

提出问题

在使用 laravel 框架的 php artisan storage:link 命令创建软连接后,访问图片,直接访问没有问题,但是通过代理(如下代码)访问,就会提示:404 not found。

复制代码
        location /digital-api/ {
                proxy_pass http://192.168.1.99:83/;
        }

解决方案

经过排查发现,访问图片地址被当做接口请求了,这就意味着 nginx 代理匹配出现了问题,没有匹配到正确的代理路径,代理配置需要做如下更改:

复制代码
        location ^~ /digital-api/ {
                proxy_pass http://192.168.1.99:83/;
        }

分析说明

在询问 AI 之后,解释如下:

在 Nginx 配置中,^~ 是一个特殊的字符,它的作用是指定一个最长匹配的 location。当 Nginx 处理请求时,它会查找与请求 URI 最长匹配的 location,并使用该 location 进行处理。如果没有找到精确匹配的 location,Nginx 会使用具有 ^~ 前缀的最长匹配 location。

^~ 的作用

  • 最长匹配^~ 确保 Nginx 使用最长的非正则表达式 location 匹配。如果没有 ^~,Nginx 可能会选择一个较短的匹配,这可能导致请求被错误地路由。
  • 优先级 :在有多个 location 块可以匹配同一个请求时,带有 ^~ 的 location 块会优先于没有 ^~ 的正则表达式 location 块。

为什么需要 ^~

在您的配置中:

nginx 复制代码
location ^~ /digital-api/ {
    proxy_pass http://192.168.1.99:83/; 
}
  • 没有 ^~ 的情况 :如果请求的 URI 是 /digital-api/some/path/to/image.png,Nginx 可能会找到一个更短的匹配(例如 location /),并使用该 location 处理请求,导致请求被错误地代理或返回 404。
  • ^~ 的情况 :使用 ^~ 确保 Nginx 优先使用 /digital-api/ 这个最长匹配的 location,即使有其他更通用的 location 块(如 location /)存在。这样,请求就会被正确地代理到 http://192.168.1.99:83/digital-api/some/path/to/image.png

解决方案

确保您的 Nginx 配置中使用了 ^~ 来指定最长匹配的 location,这样可以确保请求被正确地路由到预期的后端服务。如果您的后端服务需要处理特定的路径或需要特定的 header,确保这些配置在正确的 location 块中设置。

检查网页链接的合法性

如果访问 http://192.168.1.99:83/ 时遇到问题,可能是因为网络问题或链接本身的问题。请检查以下几点:

  1. 网络连接 :确保您的设备可以访问 192.168.1.99 这个 IP 地址。
  2. 服务状态 :确保 192.168.1.99 上的端口 83 上的服务正在运行。
  3. 防火墙设置:检查是否有防火墙规则阻止了对该端口的访问。
  4. 链接格式:确保链接格式正确,没有多余的空格或特殊字符。

如果问题仍然存在,可能需要进一步的网络诊断或联系网络管理员。
******************************** 只要思想不滑坡,办法总比困难多********************************

相关推荐
车载测试工程师6 小时前
车载以太网网络测试-29【SOME/IP-SD】-SD状态机
网络·网络协议·tcp/ip·车载系统·php
孙克旭_12 小时前
day045-nginx跳转功能补充与https
linux·运维·nginx·https
还鮟16 小时前
CTF Web PHP弱类型与进制绕过(过滤)
php·ctf
zorro_z16 小时前
PHP语法基础篇(八):超全局变量
php
RW~19 小时前
Minio安装配置,桶权限设置,nginx代理 https minio
运维·nginx·https·minio
CodeWithMe1 天前
Nginx入门进阶:从零到高手的实战指南
运维·nginx
Ahlson1 天前
【fnNAS】docker的nginx配置html
nginx·docker·容器·fnnas
斯普信专业组1 天前
K8s环境下基于Nginx WebDAV与TLS/SSL的文件上传下载部署指南
nginx·kubernetes·ssl
九分源码1 天前
基于PHP+MySQL组合开发开源问答网站平台源码系统 源码开源可二次开发 含完整的搭建指南
mysql·开源·php
亦舒.1 天前
宝塔面板Nginx手动配置负载均衡实战指南
运维·nginx·负载均衡