莫名其妙的Nginx配置

首先,我有一个图片,位置存放在 /var/www/joker/storage/app/public/images/laravel-echo.png

莫名其妙的Nginx配置

此时我想让访问 http://localhost/storage/images/laravel-echo.png 时,读取上面的那个图片。此时我就需要加一个 Nginx 的 location 配置:

    location /storage/ {
        alias   /var/www/joker/storage/app/public/;
        autoindex       on;
    }

加入以后,我重启了 Nginx。访问图片地址时,居然将图片地址重定向到了 http://localhost/storage/images/laravel-echo.png/,在 URI 后面多了一个「 / 」斜杠。然后就返回 404 了,百思不得姐啊。下面是我的 Nginx 配置信息:

# 80 端口
server {
    listen      80;
    server_name localhost;
    root        /var/www/joker/public;
    index       index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location /storage/ {
        alias   /var/www/joker/storage/app/public/;
        autoindex       on;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
# 443 端口
server {
    listen      443 ssl;
    server_name localhost;
    root        /var/www/joker/public;
    index       index.html index.htm index.php;

    ssl_certificate         /etc/nginx/cert/5518746_localhost.pem;
    ssl_certificate_key     /etc/nginx/cert/5518746_localhost.key;
    ssl_session_timeout     5m;
    ssl_ciphers             ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers       on;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location /storage/ {
        alias /var/www/joker/storage/app/public/;
        autoindex       on;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

问题:#

为什么 80 端口会重定向到 URI 末尾加「 / 」的地址?如从:#

http://localhost/storage/images/laravel-echo.png

重定向到:

http://localhost/storage/images/laravel-echo.png/

莫名其妙的Nginx配置
莫名其妙的Nginx配置

为什么 443 端口没有问题?#

莫名其妙的Nginx配置
莫名其妙的Nginx配置

答案:#

浏览器缓存…… 尴尬。下面粘一个浏览器的加载流程图吧,转自网络:

莫名其妙的Nginx配置

第一次访问图片地址,未找到文件,便 301 重定向到新的地址。此时,第一次的请求结果已经缓存到浏览器。之后的每一次访问都会读取浏览器的缓存。图片的缓存需要通过浏览器的设置选项删除,开发者工具的 storage 中无效。

莫名其妙的Nginx配置

莫名其妙的Nginx配置

再见了妈妈今晚我就要远航,别为我担心我有快乐和智慧的桨~
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

我采用了和你一样的配置,测试是没有问题的:

server
{
  server_name m.test.meetlan.com;
  root  /www/new-bwallet/public;

  include php.conf;

  #URL重写
  #include rewrite/laravel.conf;
  include rewrite/thinkphp.conf;

    location = /status {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    }

    location /storage/ {
        alias   /www/new-bwallet/storage/app/public/;
        autoindex       on;
    }

  #SSL
  #include default_ssl.conf;

  include ip.black;
}

file

你这个重定向行为,有没有可能是浏览器行为,或者是缓存造成的呢?因为 301 是永久重定向,如果你第一次缓存过了,非常久都不会过期,建议你尝试下更换浏览器,或者情况缓存再试试。

3年前 评论
LiamHao (楼主) 3年前
LiamHao (楼主) 3年前
讨论数量: 3

我采用了和你一样的配置,测试是没有问题的:

server
{
  server_name m.test.meetlan.com;
  root  /www/new-bwallet/public;

  include php.conf;

  #URL重写
  #include rewrite/laravel.conf;
  include rewrite/thinkphp.conf;

    location = /status {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    }

    location /storage/ {
        alias   /www/new-bwallet/storage/app/public/;
        autoindex       on;
    }

  #SSL
  #include default_ssl.conf;

  include ip.black;
}

file

你这个重定向行为,有没有可能是浏览器行为,或者是缓存造成的呢?因为 301 是永久重定向,如果你第一次缓存过了,非常久都不会过期,建议你尝试下更换浏览器,或者情况缓存再试试。

3年前 评论
LiamHao (楼主) 3年前
LiamHao (楼主) 3年前

这个不是直接 php artisan storage:link 就可以吗?

3年前 评论
LiamHao (楼主) 3年前
LiamHao (楼主) 3年前
小李世界 (作者) 3年前

用开发者工具时可以勾上这个「禁用缓存」。 file

3年前 评论
LiamHao (楼主) 3年前