- 一、Nginx介绍
- 1.1为什么使用Nginx?
- 1.2 Nginx的特点
- 二、Nginx在docker下的安装
- 三、Nginx的配置文件
- 3.1关于Nginx的核心配置文件nginx.conf
- 3.2 修改docker-compose文件
- 四、Nginx的反向代理
- 4.1 正向代理
- 4.2 反向代理
- 4.3 基于Nginx实现反向代理
- 4.4 关于Nginx配置文件的location的路径映射
- 五、负载均衡
- 六、动静分离
- 6.1 并发能力公式
- 6.2 动态资源代理
- 6.3 静态资源代理
- 七、集群搭建
- 7.1 为什么要搭建Nginx集群—单点故障
- 7.2 搭建流程
- 八、使用Nginx部署Django项目的流程
本笔记的学习链接:B站学习链接
1.1为什么使用Nginx?下图是服务器搭建集群:
- 问题1:客户端到底要将请求发送到那哪个服务器?
- 问题2:如果所有客户端的请求都发送给了服务器1,服务器2白搭建了怎么办?
- 问题3:客户端发送的请求可能是申请动态资源,也有可能是静态资源,要怎么处理?
在搭建集群后,使用Nginx做反向代理服务器
当我们有了Nginx后,Nginx会自动的分配服务器,并且动态资源交给服务器,静态资源自给会进行处理。
1.2 Nginx的特点1.介绍
俄罗斯人研发,2004年发布了第一个版本
2.特点
- 稳定性极强,可以一直运行下去;
- 提供了丰富的配置实例;
- 占用内存小,并发能力强。
-
第一步:.http://hub.daocloud.io/网站中搜索Nginx
点击拉取按钮
-
第二步:在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
上边引入的 include /etc/nginx/conf.d/*.conf;将引入的内容查找处理
后期主要修改server块
- 在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,恢复正常
- 正向代理服务器由客户端设立
- 客户端了解代理服务器和目标服务器是谁
- 帮助我们是想突破访问权限,提供访问速度
- 服务器不知道客户端是谁
- 反向代理服务器是配置在服务端的
- 客户端不知道自己访问的是哪一台服务器
- 可以达到负载均衡,并且可以隐藏服务器真正的ip地址
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会持续分配给一个服务器
并发能力公式:
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
#写入内容
hello
④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
见链接: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服务
启动,访问服务,部署完成