先准备两个文件:

  fastdfs-nginx-module-master.tar.gz:fastDFS nginx安装包

  nginx-1.17.3.tar.gz:nginx安装包

  注:这两个包文件要匹配,同时还要和fastDFS的两个包文件匹配,否则会报错。

1 安装

1.1 安装fastDFS包和nginx包

  把fastdfs-nginx-module-master.tar.gz和nginx-1.17.3.tar.gz拷贝到/srv目录下。执行:

$ tar -xzvf fastdfs-nginx-module-master.tar.gz
$ tar -xzvf nginx-1.17.3.tar.gz
$ cd nginx-1.17.3
$ sudo ./configure --prefix=/usr/local/nginx/ --add-module=/srv/fastdfs-nginx-module-master/src
$ sudo make
$ sudo make install
$ whereis nginx

1.2 启动nginx

$ cd /usr/local/nginx/sbin
$ ./nginx
$ ps -aux|grep nginx

1.3 修改fastDFS配置

$ cd /srv/fastdfs-nginx-module-master/src
$ vi mod_fastdfs.conf

1.3.1 修改跟踪服务器地址(此处指向的跟踪服务器,必须是公网IP,否则外网访问不到。)

  tracker_servier=49.235.75.157

1.3.2 允许组名

1.3.3 配置存储服务器

  store_path0=/opt/fdfs/storage

1.4 修改nginx配置

$ cp mod_fastdfs.conf /etc/fdfs
$ cd /srv/fastdfs-5.05/conf
$ cp anti-steal.jpg mime.types /etc/fdfs
$ cd /usr/local/nginx/conf
$ vi nginx.conf

location /group1/M00 {
    root /opt/fdfs/storage;
    ngx_fastdfs_module;
}

  由于配置了group1/M00的访问,需要创建一个group1目录及做相应的软链接

$ mkdir /opt/fdfs/storage/data/group1
$ ln -s /opt/fdfs/storage/data /opt/fdfs/storage/data/group1/M00

1.5 重新开机,运行

$ export LD_LIBRARY_PATH=/usr/lib64/
$ /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
$ /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
$ netstat -unltp|grep fdfs

$ /usr/local/nginx/sbin/nginx
$ netstat -unltp|grep nginx

1.6 远程访问

  直接在浏览器输入服务器IP,如果出现以下页面,表示nginx部署成功了。

2 上传测试

  在服务器上上传一个文件

$ /usr/bin/fdfs_test /etc/fdfs/client.conf upload /srv/1.jpg

  此时可以看到:

  把http://172.17.0.11换成外网地址,即可远程访问,即:

  http://49.235.75.157/group1/M00/00/00/rBEAC11b822AB6Q_AAGmsQJIYaM159_big.png

  可看到以下效果:

  至此,fastDFS文件上传就完成了.

3 python上传

3.1 下载client.conf

  在Django工程目录下创建一个Configurations

  在服务器上操作:

$ cd /etc/fdfs
$ sz client.conf

  弹出下载地址,选择Django目录下的配置目录Configurations.

3.2 编写python代码

  在APP目录下,打开tests.py,编写以下代码:

from fdfs_client.client import *

client_conf_obj = get_tracker_conf(r'client.conf')
client = Fdfs_client(client_conf_obj)
ret = client.upload_by_filename("d:/timg.jpg")
print(bytes(ret['Group name']).decode())  # 返回字节串
print(bytes(ret['Remote file_id']))  # 返回字节串
print(ret['Local file name'])  # 返回字符串
print(ret['Uploaded size'])  # 返回字符串
print(bytes(ret['Storage IP']))  # 返回字节串

  运行结果如下:

group1
b'group1/M00/00/00/rBEAC11dPyuAa3FpAAIfQ-Dmqnk775.jpg'
d:/timg.jpg
135.82KB
b'49.235.75.157'

4 在Django工程中使用fastDFS上传下载

4.1 重写python文件上传类

  在Django工程目录下,创建文件夹为GeneralTools,用于处理存储常用工具类。

  在GeneralTools下创建文件storage.py,内容如下:

from django.core.files.storage import Storage
from TongHeng import settings
from fdfs_client.client import *

class FdfsStorage(Storage):
    def __init__(self, client_conf=None, base_url=None):
        if client_conf is None:
            client_conf = settings.FDFS_CLIENT_CONF
        self.client_conf = client_conf
        if base_url is None:
            base_url = settings.FDFS_URL
        self.base_url = base_url

    def _open(self, name, model='rb'):
        pass

    def _save(self, name, content):
        client_conf_obj = get_tracker_conf(self.client_conf)
        client = Fdfs_client(client_conf_obj)
        res = client.upload_by_buffer(content.read())
        if res.get('Status') != "Upload successed.":
            raise Exception('上传失败')
        file_name = res.get('Remote file_id')
        return file_name.decode()

    def exists(self, name):
        return False

    def url(self, name):
        return self.base_url + name

4.2 配置settings.py

# 覆盖Django默认指定的文件存储方式
DEFAULT_FILE_STORAGE = 'Tools.storage.FdfsStorage'
# 自定义两个变量,分别表示client.conf文件的路径和fdfs的url
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'config', 'client.conf')
FDFS_URL = 'http://49.235.75.157:80/'

4.3 创建模型

  打开APP目录下的models.py,创建一个模型

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    username = models.CharField(max_length=30, verbose_name='姓名')
    img = models.ImageField(upload_to='', verbose_name='照片')

    def __str__(self):
        return self.username

    class Meta:
        db_table = 'UserInfo'

4.4 编写模板

  在APP目录下Templates中创建一个名为index.html的模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% for foo in obj %}
    <img src="{{ foo.img.url }}" alt="">
{% endfor %}

</body>
</html>

4.5 编写视图

  打开APP目录下的views.py,编写一个视图

from django.shortcuts import render
from django.views.generic.base import View
from nucleus import models

# Create your views here.
class Index(View):
    @classmethod
    def get(cls, request):
        obj = models.UserInfo.objects.all()
        return render(request, 'index.html', {'obj': obj})

4.6 配置url

path('Index/', views.Index.as_view(), name='index'),

4.7 运行后,浏览器显示以下效果

  至此,nignx转发fastDFS请求配置完成!

  

08 部署nginx web服务器(转发fastDFS请求)的更多相关文章

  1. 09 部署nginx web服务器(转发uwsgi请求)

    1 配置nginx转发 $ whereis nginx $ cd /usr/local/nginx/conf $ vi nginx.conf 注释掉原来的html请求,增加uwsgi请求. locat ...

  2. nginx web服务器概念了解 配置

    服务器 服务器 服务器是一种提供高效计算的机器,与普通的PC主机相比,具有可观的稳定性,高并发性,可扩展性. 互联网任何一个应用都是以服务器为基础设施的,没有服务器我们就无法访问网络上的任何内容,只能 ...

  3. 20步打造最安全的NGINX WEB服务器

    Nginx 是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器.它运行在UNIX,GNU /linux,BSD 各种版本,Mac OS X,Solaris和Wind ...

  4. 构建高效安全的Nginx Web服务器

    一 为什么选择Nginx搭建Web服务器 Apache和Nginx是目前使用最火的两种Web服务器,Apache出现比Nginx早.Apache HTTP Server(简称Apache)是世界使用排 ...

  5. nginx web服务器详解1(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.blog.51cto.com/2033581/1285332 大 ...

  6. asp.net 开发问题:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值。

    "Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值." 这个问题在开发需要上传文件的时候可能会遇到,今天遇到这个问题,百度过也有挺多的修改方法. 方法1: 修 ...

  7. asp.net 问题:Web 服务器上的请求筛选模块被配置为 拒绝包含的查询字符串过长的请求

    发现问题: post请求,在发送一个图片base64编码的字符串时,服务端报这个错误. 报错信息中给出了解决办法: 最可能的原因: Web 服务器上的请求筛选被配置为拒绝该请求,因为查询字符串过长. ...

  8. Ext.ux.UploadDialog上传大文件 HTTP 错误 413.1 - Request Entity Too Large Web 服务器拒绝为请求提供服务,因为该请求实体过大。Web 服务器无法为请求提供服务,因为它正尝试与客户证书进行协商,但请求实体过大。

    问题描述 问题:HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(I ...

  9. 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

    作者简介   李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...

随机推荐

  1. Phpstorm 2020-01-04试了可用的激活码【亲测可用】WebStrom

    [直接点击试用30天] http://myphp.vip/ 测试时间:2018-10-12可用(v2019.2) 测试时间:2019-12-24可用(v2019.2) 测试时间:2020-01-04可 ...

  2. 【python基础语法】第2天作业练习题

    """ 1.用户输入一个数值,请判断用户输入的是否为偶数?是偶数输出True,不是输出False(提示:input输入的不管是什么,都会被转换成字符串,自己扩展,想办法将 ...

  3. 吴裕雄--天生自然 PYTHON数据分析:糖尿病视网膜病变数据分析(完整版)

    # This Python 3 environment comes with many helpful analytics libraries installed # It is defined by ...

  4. BundlePhobia

    1.BundlePhobia用于分析npm package的依赖.bundle后的大小.下载速度预估等等,帮助你在引用一个package之前了解引入该package的代价. 2.也可以将项目的pack ...

  5. html里面用Jquery移除tr元素后,滚动条会回到顶部问题处理

    问题如下图,删除一行后,滚动条会自动回到顶部,即使先把滚动条禁止也还是会回到顶部 参考这个 https://bbs.csdn.net/topics/392233437 发现确实自己的按钮事件写在了a标 ...

  6. youhua

  7. Costco这样的超级零售商,能不能干掉电商?

    名创优品创始人叶国富曾说过,Costco只是没有来到中国(大陆),如果它来了,中国现在的零售业全部都会"死光".叶国富的话,似乎一语成箴. 随着Costco正式入华,其正在彻底搅动 ...

  8. python3练习100题——054

    题目:取一个整数a从右端开始的4〜7位. a=input('please input a num:') print(a[-7:-3])

  9. python3-cookbook笔记:第一章 数据结构和算法

    python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...

  10. laravel中{{}}和{!! !!}的区别

    1.{{}}和{!! !!} 中{{}}支持转义     一段html代码只是被当成普通的字符串输出 ,{!! !!} 不支持转移  一段html代码可以被正常的解析 1.2具体什么意思呢我们上代码演 ...