• 35648

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

Nginx实现图片服务器动态路由 原

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/0701/4223.html

>>>

Nginx实现图片服务器动态切换

业务背景

目前公司有个项目,之前的附件服务器是单机的,最近磁盘空间满了,磁盘又无法无伤扩容,现需要将后续的附件存入另外一个服务器,且代码不易快速修改;

面临问题:

  • 以往存储的附件地址都是相对地址(如果是绝对地址就不用这么麻烦了),访问附件都是当前项目的域名直接加上/uploads/时间/图片.jpg,如http://www.xxx.com/upload/20190701/demo.jpg;
  • 新的附件服务器的读存不能影响旧的附件服务器的读取;

实现思路

为了方便演示,这里用192.168.1.100替代 www.xxx.com

服务器 存储地址 访问地址
服务器A /usr/local/upload/ 192.168.1.100:8080/upload
服务器B /usr/local/upload/ 192.168.1.101:8080/upload
  • 仍旧访问原来的对外地址,http://192.168.1.100:8080/upload/demo.jpg;
  • 当原地址访问404时,自动访问服务器B对应的附件,URL地址不变;

步骤

1、启动服务器A的图片服务(192.168.1.100)

服务器A需安装Nginx,安装步骤略

server {
    listen       8080;
    server_name  localhost;
    # 例如访问 http://192.168.1.100:8080/upload/demo.jpg
    location ^~ /upload/ {
        # 相当于访问 /usr/local/upload/demo.jpg
        root /usr/local;
    }
    
    ...
}

启动nginx,访问 http://192.168.1.100:8080/upload/demo.jpg,现在能正确访问服务器A的/usr/local/upload/demo.jpg

2、启动服务器B的图片服务(192.168.1.101)

服务器B同样安装Nginx,安装步骤略

# 服务器B的nginx配置
server {
    listen       8080;
    server_name  localhost;
    # 例如访问 http://192.168.1.101:8080/upload/demo.jpg
    location ^~ /upload/ {
        # 相当于访问 /usr/local/upload/demo.jpg
        root /usr/local;
    }
    
    ...
}

启动nginx,访问 http://192.168.1.101:8080/upload/demo.jpg,现在能正确访问服务器B的/usr/local/upload/demo.jpg

3、修改服务器A的nginx配置

服务器A中的nginx配置,如下

server {
    listen       8080;
    server_name  localhost;
    # 例如访问 http://192.168.1.100:8080/upload/demo.jpg
    location ^~ /upload/ {
        # 相当于访问 /usr/local/upload/demo.jpg
        root /usr/local;
        # 如果访问不到,则尝试访问新的路径,$uri相当于/upload/demo.jpg,即将uri也传递至@new_uploads
        try_files $uri @upload_B;
    }
    
    location @upload_B {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 代理服务器B的地址
        proxy_pass http://192.168.1.101:8080;
    }
}

重新启动服务器A的nginx,并删除服务器A对应的图片,访问 http://192.168.1.100:8080/upload/demo.jpg,会发现得到的是服务器B的图片,即成功实现图片的动态“切换”,完成业务目标。

总结

  • 利用nginx的 try_files $uri @upload_B,实现内部重定向。

博客

https://my.oschina.net/gmarshal/blog/3067945

欢迎关注我的个人微信订阅号:(据说这个头像程序猿专用)

输入图片说明

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!