如何解决Nginx显示正确的重写数据,但未按预期执行
我有一个使用fastcgi在Nginx后面运行的laravel应用程序。 www.example.com/media/images/someImage.jpeg
有可用的图像在www.example.com/media/images/660x440/someImage.jpeg
处还可以找到相同尺寸的不同尺寸的图像。laravel上正在运行一个脚本,如果www.example.com/api/images/660x440/someImage.jpeg上不存在该图像,则该图像可用于此大小。
例如,如果www.example.com/media/images/660x440/someImage.jpeg不存在,则可以访问www.example.com/api/images/660x440/someImage.jpeg来显示图像,现在该图像也存在于www.example.com/media/images/660x440/someImage.jpeg下,希望这是有道理的。
好的,所以我现在要解决的问题是如何通过nginx重写实现这一目标。
想法是当用户尝试访问www时。 example.com/media/images/660x440/someImage.jpeg并不存在,nginx将其重写为/api/images/660x440/someImage.jpeg(脚本)并显示生成的图像,但是所有这些都无需更改网址。因此,所请求的URL保持类似于www。 example.com/media/images/660x440/someImage.jpeg,但在幕后它在/api/images/660x440/someImage.jpeg请求脚本,并在同一www上显示生成的图像。 example.com/media/images/660x440/someImage.jpeg。
我的nginx配置如下
server {
listen 8080;
root /var/www/public;
index index.php index.html index.htm;
client_max_body_size 100M;
resolver kube-dns.kube-system.svc.cluster.local; #this is for rancher purposes
set $target app-fpm.app.svc.cluster.local; #also this
error_log /var/log/nginx/error.log notice;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location /media/images/ {
alias /var/www/storage/app/public/media/images/;
try_files $uri /$uri @generator;
}
location @generator {
rewrite ^/media/images/(.*) /api/images/$1 last;
}
location ~ ^/.+\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass $target:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
我已经在nginx中启用了重写调试功能,并且在错误日志中我可以看到-
2020/09/11 23:14:28 [notice] 1034#1034: *161 "^/media/images/(.*)" matches "/media/images/660x440/someImage.jpeg",client: 10.42.0.0,server:,request: "GET /media/images/660x440/someImage.jpeg HTTP/1.1",host: "www. example .com"
2020/09/11 23:14:28 [notice] 1034#1034: *161 rewritten data: "/api/images/660x440/someImage.jpeg",args: "",host: "www. example .com"
您可以看到重写的数据是正确的,它是/api/images/660x440/someImage.jpeg,但根据access.log却显示404错误
10.42.0.0 - - [11/Sep/2020:23:33:43 +0300] "GET /media/images/660x440/someImage.jpeg HTTP/1.1" 404 622 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/85.0.4183.83 Safari/537.36"
但是它应该显示新生成的图像。 我在这里想要实现的目标甚至可能吗?
我非常感谢您的帮助, 谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。