当前位置: 首页 > article >正文

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 块。

为什么需要 ^~

在您的配置中:

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

如果问题仍然存在,可能需要进一步的网络诊断或联系网络管理员。

******************************** 只要思想不滑坡,办法总比困难多********************************

http://www.kler.cn/a/390641.html

相关文章:

  • 嵌入式C语言:二维数组
  • 一个基于Spring Boot的智慧养老平台
  • React 元素渲染
  • 人工智能--自然语言处理简介
  • 干部调整辅助决策系统:为干部管理注入新活力
  • 三周精通FastAPI:37 包含 WSGI - Flask,Django,Pyramid 以及其它
  • Fortinet Security Fabric安全平台
  • 【GPTs】Get Simpsonized:一键变身趣味辛普森角色
  • 微服务电商平台课程三:搭建后台服务
  • 20241112_高级工程数学作业
  • 观影新境界:nastool自动化管理结合cpolar助力群晖NAS远程影音享受——“cpolar内网穿透”
  • linux基础-完结(详讲补充)
  • elementUI中2个日期组件实现开始时间、结束时间(禁用日期面板、控制开始时间不能超过结束时间的时分秒)实现方案
  • PaddleOCR安装教程
  • 【架构论文-1】面向服务架构(SOA)
  • springboot yml配置信息书写与获取
  • 大数据数据存储层MemSQL, HBase与HDFS
  • SQL相关常见的面试题
  • css的z-index图层使用有什么要求
  • Python小游戏25——黄金矿工
  • Odoo:免费开源的钢铁冶金行业ERP管理系统
  • 国产AI图片工具,全部免费亲测实用!
  • LeetCode【0007】整数反转