莫名其妙的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配置

再见了妈妈今晚我就要远航,别为我担心我有快乐和智慧的桨~
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

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

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是永久重定向,如果你第一次缓存过了,非常久都不会过期,建议你尝试下更换浏览器,或者情况缓存再试试。

2年前 评论
LiamHao (楼主) 2年前
LiamHao (楼主) 2年前
讨论数量: 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是永久重定向,如果你第一次缓存过了,非常久都不会过期,建议你尝试下更换浏览器,或者情况缓存再试试。

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

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

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

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

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

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!