08 部署nginx web服务器(转发fastDFS请求)
先准备两个文件:
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请求)的更多相关文章
- 09 部署nginx web服务器(转发uwsgi请求)
1 配置nginx转发 $ whereis nginx $ cd /usr/local/nginx/conf $ vi nginx.conf 注释掉原来的html请求,增加uwsgi请求. locat ...
- nginx web服务器概念了解 配置
服务器 服务器 服务器是一种提供高效计算的机器,与普通的PC主机相比,具有可观的稳定性,高并发性,可扩展性. 互联网任何一个应用都是以服务器为基础设施的,没有服务器我们就无法访问网络上的任何内容,只能 ...
- 20步打造最安全的NGINX WEB服务器
Nginx 是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器.它运行在UNIX,GNU /linux,BSD 各种版本,Mac OS X,Solaris和Wind ...
- 构建高效安全的Nginx Web服务器
一 为什么选择Nginx搭建Web服务器 Apache和Nginx是目前使用最火的两种Web服务器,Apache出现比Nginx早.Apache HTTP Server(简称Apache)是世界使用排 ...
- nginx web服务器详解1(转)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.blog.51cto.com/2033581/1285332 大 ...
- asp.net 开发问题:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值。
"Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值." 这个问题在开发需要上传文件的时候可能会遇到,今天遇到这个问题,百度过也有挺多的修改方法. 方法1: 修 ...
- asp.net 问题:Web 服务器上的请求筛选模块被配置为 拒绝包含的查询字符串过长的请求
发现问题: post请求,在发送一个图片base64编码的字符串时,服务端报这个错误. 报错信息中给出了解决办法: 最可能的原因: Web 服务器上的请求筛选被配置为拒绝该请求,因为查询字符串过长. ...
- Ext.ux.UploadDialog上传大文件 HTTP 错误 413.1 - Request Entity Too Large Web 服务器拒绝为请求提供服务,因为该请求实体过大。Web 服务器无法为请求提供服务,因为它正尝试与客户证书进行协商,但请求实体过大。
问题描述 问题:HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(I ...
- 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应
作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...
随机推荐
- go单任务版爬虫
go单任务版爬虫(爬取珍爱网) 爬虫总体算法 单任务版爬虫架构 任务 获取并打印所在城市第一页用户的详细信息 代码实现 /crawler/main.go package main import ( & ...
- 最短路径:初涉Dijkstra算法
模板题目:https://www.luogu.com.cn/problem/P1339 我的代码: #include<cstdio> #include<cstring> #in ...
- 由于找不到opencv_world320d.dll,无法继续执行代码。解决方案
将 opencv 安装路径 目录\opencv\build\x64\vc14\bin 中 3 个后缀是.dll 的应用程序扩展复制到 C:\Windows\System32 中 完美解决!
- sum用法
自带的sum 用法: 但是2个列表或者2个元组放在里面就报错了.这时候就要用到 numpy 里面的sum 用法了 import numpy as np list1 = [1,2,3,4,5] list ...
- bootstrap支持ie8 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
做一个在线系统,PC端也要做,但要兼容千恶的IE8[IE6 是万恶,打死我都不会管IE6],IE8 是我底线了md, 在IE8下 bottstrap 错乱,变形,不支持一些属性的问题,下面看了一篇 某 ...
- Wilson's Theorem
ProofsSuppose first that $p$ is composite. Then $p$ has a factor $d > 1$ that is less than or equ ...
- 论文-MobileNet-V1、ShuffleNet-V1、MobileNet-V2、ShuffleNet-V2、MobileNet-V3
1.结构对比 1)MobileNet-V1 2)ShuffleNet-V1 3)MobileNet-V2 4)ShuffleNet-V2
- 【新人赛】阿里云恶意程序检测 -- 实践记录11.3 - n-gram模型调参
主要工作 本周主要是跑了下n-gram模型,并调了下参数.大概看了几篇论文,有几个处理方法不错,准备下周代码实现一下. xgboost参数设置为: param = {'max_depth': 6, ' ...
- 数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一:refresh的停车场 Description refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时 ...
- CSS小记录
1.图片铺满 background: rgba(12, 100, 129, 1) url('https://images.cnblogs.com/cnblogs_com/yukarin/1639008 ...