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. 链接格式:确保链接格式正确,没有多余的空格或特殊字符。

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

相关推荐
梓仁沐白15 分钟前
【Agent 设计模式】多智能体协作
microsoft·设计模式·php
七七powerful41 分钟前
为离线的bcliunx euler&龙晰 配置 yum源 nginx代理
nginx·yum·bclinux
AlbertS2 小时前
Let‘s Encrypt 证书自动续期并自动应用到Nginx
运维·nginx·ssl·cerbot·renew·续期
泡沫冰@16 小时前
上章节中文件的讲解
前端·网络·nginx
weixin_BYSJ198717 小时前
springboot校园自习室管理小程序---附源码32142
java·javascript·spring boot·python·django·flask·php
大鱼>19 小时前
eBPF内核编程:从TC到XDP的全栈可观测性
linux·服务器·php
aixingpan20 小时前
aixingpan.cn API开发文档:api_docs_trichart_natal_solararc_transit2接口指南
前端·php
完美火龙篇 四月的友20 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
开发语言·php
冷莫溪21 小时前
Zabbix——认识及部署Zabbix(基于Rocky9.7)
linux·运维·php·zabbix
Y3815326621 天前
2026 年 7 月,SERP API 调用的稳定性实战:超时、重试、降级
开发语言·数据库·人工智能·php