认识Nginx并部署Django项目

一、Nginx介绍

本笔记的学习链接:B站学习链接

1.1为什么使用Nginx?

下图是服务器搭建集群:

在这里插入图片描述

  • 问题1:客户端到底要将请求发送到那哪个服务器?
  • 问题2:如果所有客户端的请求都发送给了服务器1,服务器2白搭建了怎么办?
  • 问题3:客户端发送的请求可能是申请动态资源,也有可能是静态资源,要怎么处理?

在搭建集群后,使用Nginx做反向代理服务器

在这里插入图片描述

当我们有了Nginx后,Nginx会自动的分配服务器,并且动态资源交给服务器,静态资源自给会进行处理。

1.2 Nginx的特点

1.介绍

俄罗斯人研发,2004年发布了第一个版本

2.特点

  • 稳定性极强,可以一直运行下去;
  • 提供了丰富的配置实例;
  • 占用内存小,并发能力强。

二、Nginx在docker下的安装

  • 第一步:.http://hub.daocloud.io/网站中搜索Nginx

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLfO8AGj-1594283737898)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\image-20200708202014166.png)]
    点击拉取按钮
    在这里插入图片描述

  • 第二步:在Linux下依次执行以下命令

    1.cd /opt/
    2.mkdir docker_nginx
    3.cd docker_nginx
    
  • 第三步:在Linux执行以下命令

    vi docker-compose.yml
    
  • 第四步:输入i进入编辑模式,复制以下命令

    version:'3.1'
    services:
    	nginx:
    		restart:always
    		image:daocloud.io/library/nginx:latest
    		container_name:nginx
    		ports:
    			- 80:80
    

    解释:ports是我们的nginx的常用端口号,image镜像链接是刚才获取的拉取链接

  • 第五步: 运行,在Linux输入命令

    docker-compose up -d
    
  • 第六步:直接打开浏览器输入网址

    IP地址:8080
    

在这里插入图片描述

三、Nginx的配置文件

3.1关于Nginx的核心配置文件nginx.conf

在这里插入图片描述
在这里插入图片描述

上边引入的 include /etc/nginx/conf.d/*.conf;将引入的内容查找处理

在这里插入图片描述
后期主要修改server块

3.2 修改docker-compose文件

  • 在Linux执行以下命令,再linux执行命令,退出容器
exit
dicker -compose down
vi docker-compose.yml
  • 输入i进入编辑模式,复制以下命令
version:'3.1'
services:
	nginx:
		restart:always
		image:daocloud.io/library/nginx:latest
		container_name:nginx
		ports:
			- 80:80
		volumes:
			- /opt/docker_nginx/conf.d/:/etc/nginx/conf.d
  • 再执行命令构建docker
docker-compose build
  • 启动docker
docker-compose up -d # 启动
  • 浏览器进入nginx发现无法运行,因为没有server块儿,所以我们需要重写server块

  • linux下创建文件

    vi default.conf
    

    i模式下编写内容

    server{
    	lister 80;
    	server_name localhost;
    	
    	location / {
    		root /usr/share/nginx/html;
    		index index.html index.htm;
    	}
    }
    
  • 重启nginx

    docker-compose restart
    
  • 浏览器再次进入nginx,恢复正常

四、Nginx的反向代理

4.1 正向代理

在这里插入图片描述

  • 正向代理服务器由客户端设立
  • 客户端了解代理服务器和目标服务器是谁
  • 帮助我们是想突破访问权限,提供访问速度
  • 服务器不知道客户端是谁

4.2 反向代理

在这里插入图片描述

  • 反向代理服务器是配置在服务端的
  • 客户端不知道自己访问的是哪一台服务器
  • 可以达到负载均衡,并且可以隐藏服务器真正的ip地址

4.3 基于Nginx实现反向代理

1.准备一个目标服务器,测试自己原来的项目是否可以用

2.进入配置文件

cd docker_nginx/
cd conf.d/
vi default.conf

3.修改配置文件

server{
	lister 80;
	server_name localhost;
	
	# 基于反向代理访问到服务器
	location / {
		proxy_pass http://ip:8080/;
	}
	
	#location / {
	#	root /usr/share/nginx/html;
	#	index index.html index.htm;
	}
}

4.重启nginx

docker-compose restart

4.4 关于Nginx配置文件的location的路径映射

在这里插入图片描述

# 1. =匹配
location = / {
	# 精准匹配,主机后面不能带任何的字符串
}
# 2. 通用匹配
location /xxx {
	# 匹配所有以/xxx开头的路径
}
# 3.正则匹配
location ~/xxx {
	# 匹配所有以/xxx开头的路径
}
# 4.匹配开头路径
location ~^/images/ {
	# 匹配所有以/images开头的路径
}
# 5.匹配结尾
location ~* \.(gif|jpg|png) {
	# 匹配以这个格式结尾的
}

优先级关系:

在这里插入图片描述

五、负载均衡

Nginx默认提供 了三种负载均衡的策略

  • 轮询:将客户端发起的请求,平均分配给每一台服务器
  • 权重:将客户端的请求,根据服务器的权重不同来分配不同服务器
  • ip哈希:基于客户端ip不同,同一个ip会持续分配给一个服务器

六、动静分离

6.1 并发能力公式

并发能力公式:
	worker_processes*worker_connections/4|2=Nginx的并发能力
	解释:①这两个参数值是配置文件中的数
		 ②静态资源除以2,动态资源除以4

该图为动态资源,需要走四个连接数
在这里插入图片描述

该图为静态资源,走两个连接数

在这里插入图片描述

Nginx通过动静分离,来提升并发能力

6.2 动态资源代理

# 配置如下
location / {
	proxy_pass 路径;
}

6.3 静态资源代理

# 配置如下
location / {
	root 静态资源路径;
	index 默认访问路径下的什么资源;
	autoindex on;# 代表静态资源的全部内容,以列表内容展开
}

# 先修改docker,添加一个数据卷,映射到Nginx的一个目录
# 添加新页面或者图片

第一步:修改配置文件

vi docker-compose.yml

在这里插入图片描述
第二步:依次执行命令

docker-compose down
docker-compose up -d

第三步:依次执行

①ls  #查看文件夹html和img是否创建
②cd /html
③vi index.html
   #写入内容
   <h1>hello</h1>
④cd /img
   在此文件夹放一个图片,例如放了1.jpg

第四步:修改配置文件

cd ../
cd conf.d/
vi default.conf

在这里插入图片描述
第五步:重启docker

docker-compose restart

第六步:访问

ip/html/index.html #访问页面
ip/img #添加了autoindex on,访问该文件夹所有静态资源
ip/img/1.jpg 访问1.jpg图片

七、集群搭建

7.1 为什么要搭建Nginx集群—单点故障

单点故障,导致Nginx的宕机

当我们搭建了Nginx后,并且搭建了集群服务器,那么这个时候我们就会随机分配服务器,倘若有某台服务器宕机,我们可以访问另一台服务器。

在这里插入图片描述
倘若我们的Nginx宕机了,我们便无法访问服务器,因此我们有必要对Nginx也进行集群搭建

在这里插入图片描述
但是如果我们Nginx1坏掉了,我们随机继续分配到Nginx1后,Nginx1会报错,那么我们需要在每天Nginx中安装keepalived程序来监听我们的Nginx是不是能正常工作
在这里插入图片描述

但是我们的Nginx每个的ip和端口号不一样,那么用户怎么知道那个Nginx报错,万一输入了错误的地址还是会报错,因此我们在使用Nginx前再添加一个服务,服务有很多,这里我们列出了haproxy,使用haproxy写一个虚拟的端口号,我们再让keepalived去分配走哪个Nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HVIDTJEF-1594283737915)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\image-20200709162812645.png)]

7.2 搭建流程

见链接:https://www.bilibili.com/video/BV1W54y1z7GM?p=14

八、使用Nginx部署Django项目的流程

1. 导出django的开发环境

激活虚拟环境
pip freeze > package.txt

2. 将包目录上传服务器,并进行安装

将package.txt,放在 /opt目录下
安装 pip3 install -r package.txt
安装过程中出现超时错误:更换下载源 pip3 install -r package.txt -i 源地址

3.上传django项目

将django项目放在 /opt目录下

systemctl stop firewalld
修改 sttings⽂件,修改 ALLOWED_HOSTS = ['*'] 允许所有的主机访问

项目启动测试:python3 manage.py runserver 0.0.0.0:8000
如果出现项目报错,可能是配置中对于版本过高的问题,去修改即可

4. 安装配置uwsgi

pip3 install uwsgi
创建软连接
ln /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

测试uwsgi

uwsgi --http 192.168.1.69:8000 --file OurBlog/wsgi.py --staticmap=/static=static

在项目的主目录(manage.py)
uwsgi --http 10.10.14.180:80 --file Qshop/wsgi.py --static-map=/static=static
上述方法可以实现uwsgi驱动django,但是在工作当中,开发者更加配置文件的形式启动uwsgi

cd /opt
mkdir script
cd script
touch uwsgi.ini

编写 uwsgi.ini

[uwsgi]
chdir=/opt/OurBlog #项目目录
module=OurBlog.wsgi:application #指定项目的application
socket=/opt/script/uwsgi.sock #指定sock的⽂件路径
workers=5 #进程个数
pidfile=/opt/script/uwsgi.pid
http=192.168.2.69:8000 #指定IP端⼝
static-map=/static=/opt/OurBlog/static #指定静态文件
uid=root #用户
gid=root #组
master=true #启动主进程
vacuum=true #自动移除unix Socket和pid文件当服务停止的时候
enable-threads=true #启动线程
thunder-lock=true #序列化接受的内容,如果可能的话
harakiri=30 #设置自中断时间
post-buffering=4096 #设置缓冲
daemonize=/opt/script/uwsgi.log #设置日志目录

启动uwsgi

cd /opt/script
uwsgi --ini uwsgi.ini ## 使⽤ini⽂件启动uwsgi

在这里插入图片描述

使用浏览器访问,停止uwsgi
在这里插入图片描述

5.安装NGINX

下载NGINX包

wget -c https://nginx.org/download/nginx-1.12.2.tar.gz

解压NGINX包

tar -zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure \
make && make install

创建软链接

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

启动nginx查看效果

nginx

在这里插入图片描述

修改NGINX的配置文件

在这里插入图片描述
进行配置文件备份
在这里插入图片描述
具体配置如下: vi nginx.conf
在这里插入图片描述
修改server段
在这里插入图片描述
在这里插入图片描述

listen 监听端口
server_name 服务名字
charset utf -8#服务器编码
access_log /var/log/nginx/access.log main; #访问⽇志路径,注意:这个⽬录可能没
有,需要创建
gzip_types #压缩格式
error_log /var/log/nginx/error.log error; #错误⽇志注意:这个⽬录可能没有,需要
创建
 location / {
 include uwsgi_params; #nginx加载uwsgi模块
 uwsgi_connect_timeout 30; #连键超时时间
 uwsgi_pass unix:/opt/script/uwsgi.sock; #nginx对应的uwsgi
socket⽂件
 }
 location = /static/ {
 alias /opt/OurBlog/static; #静态⽂件路径
 index index.html index.htm; #⾸⻚
 }
 }

创建error.log日志文件
在这里插入图片描述
保证NGINX和uwsgi全部停止,然后重新启动
在这里插入图片描述
启动uwsgi和nginx

uwsgi --ini uwsgi.ini
nginx

可能会出错:80端口被占用
在这里插入图片描述
解决方案:杀死80端口的服务netstat -ntlp|grep 80

在这里插入图片描述
修改uwsgi.ini
修改http=127.0.0.1:8000 不允许外⽹通过ip+8000 端口直接访问django服务
在这里插入图片描述
启动,访问服务,部署完成

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张烫麻辣亮。

谢谢老板支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值