《Nginx入门这一篇就够了》
一、Nginx
Nginx介绍
为什么要学习Nginx?:
- 单体架构搭建集群后出现了很多问题:
- 客户端如何存储大量的服务器的ip地址和端口号
- 客户端的请求到底发送给哪台服务器
- 静态资源和动态资源如何分开处理
- Nginx解决:
- 客户端只需要记住Nginx的ip地址和端口号即可
- 客户端不需要关注请求到底发送给了哪台服务器,Nginx会做统一的请求转发
- Nginx可以代理静态资源,也可以代理动态资源,实现动静分离
二、安装Nginx
安装Nginx的docker-compose.yml
version: '3.1'
services:nginx:restart: alwaysimage: 10.9.12.254:5000/nginx:lastestcontainer_name: nginxports:- 80:80
三、Nginx的配置文件
- 全局块:work_processer 1; 值越大,并发能力越强
- events块:work_connections 1024;值越大,并发能力越强
- http块:引入了Mime.type文件,文件中存储着大量的媒体类型
- server块:listen 80; server_name localhost; 指定Nginx接收请求的ip和port
- location / 块:root 路径; index index.html; location映射请求路径,基于root和index跳转静态资源
- server块:listen 80; server_name localhost; 指定Nginx接收请求的ip和port
四、添加Nginx容器的数据卷
docker-compose.yml:
version: '3.1'
services:nginx:restart: alwaysimage: 10.9.12.254:5000/nginx:lastestcontainer_name: nginxports:- 80:80volumes:- ./conf.d/:/etc/nginx/conf.d/
手动在宿主机的conf.d目录下,编写以.conf为结尾的配置文件:
server{listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html;}
}
可以保证访问Nginx的首页即可
五、Nginx的反向代理
- 正向代理:
- 代理服务器配置在客户端
- 突破客户端的访问权限,提升访问速度
- 对目标服务器隐藏客户端信息
- 反向代理:
- 代理服务器配置在服务端
- 由代理服务器统一接收客户端的请求信息
- 对客户端隐藏其他服务的地址信息,只对外暴露代理服务器的地址
- 实现Nginx反向代理服务器
- 准备目标服务,并测试访问:
version: '3.1'
services:tomcat1:image: 10.9.12.254:5000/tomcat:8.5.15container_name: tomcat1ports:- 8081:8080volumes:- ./webapps1:/usr/local/tomcat/webapps
编写Nginx配置,并重启Nginx:
server{listen 80;server_name localhost;location / {proxy_pass http://10.9.63.210:8081/;}
}
客户端访问Nginx,并由Nginx代理到目标服务:
六、location路径映射优先级(了解)
location映射方式:
路径映射方式 | 效果 |
---|---|
location = /路径 | 精准匹配,一旦匹配上,不去匹配其他项 |
location ^~ /路径 | 字符串匹配,一旦匹配上,不去匹配其他项 |
location ^~ /路径 | 正则匹配,匹配上之后,会继续匹配其他项,要么匹配更高优先级,匹配正则最长 |
location ~ /^正则$/ | 正则匹配,效果同上,忽略路径的大小写问题 |
location /路径 | 字符串匹配,使用较多,优先级最低,一般会配置 location / 保证尽量没有404 |
七、Nginx的负载均策略
- 轮询:one by one
- 权重:根据服务器硬件条件设施的不同,分配不同的权重值,按权重比例分配请求到不同的服务器
- ip_hash:根据客户端请求时的ip地址不同,直接分配到指定的服务器上,将ip进行hash运算,再取余获取指定服务器的标识。ip_hash可以解决多服务之间数据共享问题。
7.1 实现Nginx的轮询效果
准备两台以上的目标服务器:(测试访问)
version: '3.1'
services:tomcat1:image: 10.9.12.254:5000/tomcat:8.5.15container_name: tomcat1ports:- 8081:8080volumes:- ./webapps1:/usr/local/tomcat/webappstomcat2:image: 10.9.12.254:5000/tomcat:8.5.15container_name: tomcat2ports:- 8082:8080volumes:- ./webapps2:/usr/local/tomcat/webapps
配置Nginx的配置文件:
upstream tomcats{server 10.9.63.210:8081;server 10.9.63.210:8082;# ...
}
server{listen 80;server_name localhost;location / {proxy_pass http://tomcats/;}
}
访问测试。。。
7.2 权重
准备两台以上的目标服务器:(测试访问)
version: '3.1'
services:tomcat1:image: 10.9.12.254:5000/tomcat:8.5.15container_name: tomcat1ports:- 8081:8080volumes:- ./webapps1:/usr/local/tomcat/webappstomcat2:image: 10.9.12.254:5000/tomcat:8.5.15container_name: tomcat2ports:- 8082:8080volumes:- ./webapps2:/usr/local/tomcat/webapps
配置Nginx的配置文件:
upstream tomcats{server 10.9.63.210:8081 weight=100;server 10.9.63.210:8082 weight=50;# ...
}
server{listen 80;server_name localhost;location / {proxy_pass http://tomcats/;}
}
访问测试。。。
7.3 ip_hash
准备两台以上的目标服务器:(测试访问)
version: '3.1'
services:tomcat1:image: 10.9.12.254:5000/tomcat:8.5.15container_name: tomcat1ports:- 8081:8080volumes:- ./webapps1:/usr/local/tomcat/webappstomcat2:image: 10.9.12.254:5000/tomcat:8.5.15container_name: tomcat2ports:- 8082:8080volumes:- ./webapps2:/usr/local/tomcat/webapps
配置Nginx的配置文件:
upstream tomcats{ip_hash;server 10.9.63.210:8081;server 10.9.63.210:8082;# ...
}
server{listen 80;server_name localhost;location / {proxy_pass http://tomcats/;}
}
访问测试。。。
八、Nginx的动静分离
- 因为Nginx针对静态资源和动态资源使用的连接数是不一样的,针对静态资源需要2个链接数,动态资源需要4个连接数,可能将资源分离,变相的提升Nginx的并发能力。
- 动态资源代理:proxy_pass http://ip:port/
- 静态资源代理:root 资源目录 (如果location携带路径,默认会追加到资源目录后):
server{listen 80;server_name localhost;location /html {root /usr/share/nginx/; # 因为路径携带html,所以或去/usr/share/nginx/html下找静态资源index index.html; }location /img {root /usr/share/nginx/;autoindex on; # 访问/img路径时,会以列表的形式展示当前目录下的全部静态资源}
}
九、Nginx集群
- Nginx存在单点故障问题,如果Nginx宕机,会导致所有功能都无法使用,Nginx是客户端请求的入口。
- 搭建Nginx集群存在问题:
- 如果准备多台Nginx,客户端请求到底发送到哪一台。
- 搭建了多台Nginx,如果一台Nginx出问题,如果不访问出问题的Nginx。
- 统一使用Haproxy和Keepalived解决,Haproxy提供统一的入口,Keepalived监控Nginx的生存情况
- 如果Haproxy出现问题:可以选择分组搭建Nginx集群,并分配haproxy,由DNS服务器来对域名解析,处理Haproxy宕机问题。
- 搭建Nginx集群:
- 找到预习资料中的Nginx集群搭建,并复制内部全部内容,到Linux中,直接docker-compose up -d
《Nginx入门这一篇就够了》相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- [Scala]集合中List元素转Tuple元素的函数迭代写法
- SCRIPT70: 没有权限
- 阿里云IoT将举办第三届极客创新挑战赛,吸引全球极客参赛
- java string的作用_浅谈java String不可变的好处
- 学习Spring Boot:(八)Mybatis使用分页插件PageHelper
- mysql设置账号过期
- 【Java】程序调试
- 如何打造139团队(不同层次人员的选择与培养,大型研发团队,大型敏捷开发团队)...
- 分块编码(Transfer-Encoding: chunked)
- ELM327 OBD to RS232 Interpreters
- mysql热拷贝_MySQL备份与恢复之热拷贝
- wpf listview透明但字不要透明_透明胶带放水里泡一泡,真是厉害,解决了很多家庭一大烦恼,实用...
- 第三篇:关于MVPArms与OKGO结合报错--mRootView为空
- 机顶盒系统升级服务器,服务器及其软件升级方法、IP机顶盒及其软件升级方法...
- 图片,表格末尾紧贴上方图片或表格添加脚注/备注
- 测试从业人员的职业规划
- 全屏 虚拟机_虚拟机的导入
- 恶意软件隐身术:把可执行文件隐藏在注册表里
- 【刘晓燕语法长难句】 简单句
- win 10iis php7,win10下设置IIS、安装php7.2
热门文章
- Eclipse 简介和插件开发天气预报
- 什么是镜像?阿里云服务器镜像是什么?镜像怎么选?
- 【渝粤题库】广东开放大学 电子支付与安全 形成性考核
- jQuery实现悬浮显示效果
- Build.VERSION.SDK_INT = Build.VERSION_CODES.HONEYCOMB
- python鼠标点击位置_python鼠标点击位置 Python3怎么模拟鼠标点击?
- ansys怎么使用anand模型_Anand粘塑性模型的UMAT子程序及验证
- 在ABAQUS中如何使用修正DPC帽盖模型
- android 10.0 SystemUI屏蔽某个app的通知
- 太极链——区块链可在在三个方面改善供应