1.什么是nginx
1.Nginx是高性能的HTTP和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。
2.正向代理
(1)需要在客户端配置代理服务器进行指定网站访问
客户在进行某些网址访问时,例如大陆用户访问geogle等外网需要翻墙,因此,需要在客户端配置代理服务器,以达到能够访问geogle外网的目的
3.反向代理
暴露的是代理服务器地址,隐藏了真实服务器IP地址。
例如上面的例子,我们不再访问谷歌,而是例如通过访问www.abc.com来访问谷歌
www.abc.com就是我们的反向代理服务器
3.1反向代理实例一
使用nginx反向代理,访问 www.123.com 直接跳转到127.0.0.1:8080
在 nginx.conf 配置文件中的http块中增加如下配置
server {
listen 80;
server_name 123.57.64.216;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
3.2反向代理实例二
实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中
nginx监听端口为9001,
访问 http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8082
步骤:
第一步,准备两个tomcat,一个8001端口,一个8002端口,并准备好测试的页面
第二步,修改nginx的配置文件 在http块中添加server{}
location指令说明
该指令用于匹配 URL。
语法如下:
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
例如上例中,/edu/表示匹配url中带有/edu/的地址
4.负载均衡
增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡 。
负载均衡实例
浏览器地址栏输入地址 http://208.208.128.122/edu/a.html,负载均衡效果,平均 8081 和 8082 端口中。
在 nginx 的配置文件中进行负载均衡的配置
在http块中进行配置
代码如下 :
upstream myserver {
server 123.57.64.216:8081;
server 123.57.64.216:8082;
}
server {
listen 80;
server_name 123.57.64.216;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://myserver;
#proxy_pass http://127.0.0.1:8081;
index index.html index.htm;
}
最终只需一个ip可来回切换两个服务器 进行操作
4. nginx 分配服务器策略
随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题, 顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应 足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品, 很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎, nginx 就是其中的一个,在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服 务,而且 Nginx 提供了几种分配方式(策略):
a. 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
配置方式:
b. weight
weight 代表权重, 默认为 1,权重越高被分配的客户端越多
c. ip_hash
ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
d. fair(第三方)
fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream myserver {
server 123.57.64.216:8081 weight=10;
server 123.57.64.216:8082 weight=20;
#fair
#ip_hash
}
server {
listen 80;
server_name 123.57.64.216;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://myserver;
#proxy_pass http://127.0.0.1:8081;
index index.html index.htm;
}
5.动静分离
我们访问css,html,js等静态资源时,将不再访问tomcat,而是将这些静态资源存到服务器端,通过ngnix去访问静态资源,而不再经过tomcat去获取。
动静分离实例
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种:
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
即可通过nginx访问静态资源,而不需要通过tomcat
6.安装ngnix
1.到官网下载ngnix的压缩包,切记不要再下载1.12版本以下的了,现在的centos系统已不太支持这种低版本,如果下载的是低版本的,后期会报错,建议使用1.16版本以上!!!!
http://nginx.org/ http://nginx.org/ 2.安装ngnix的相关依赖
pcre-8.3.7.tar.gz, openssl-1.0.1t.tar.gz, zlib-1.2.8.tar.gz, nginx-1.11.1.tar.gz
使用yum命令来安装
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
使用yum命令安装时可能会报错,问题就出在centos版本更新导致的低版本配置文件不支持
,详情可参考博主的另一篇博客,时空之门已准备好。
* 使用命令解压后,运行下面两条语句
./configure
make && make install
进入目录 /usr/local/nginx/sbin/nginx 启动服务
详细的启动ngnix以及打开防火墙端口号的方法,已经放在另一篇博客
linux常用操作命令(持续完善ing)_阿狗哲哲的博客-CSDN博客后端人员最实用的Linux命令都在这,确定不点个收藏?????https://blog.csdn.net/qq_52438590/article/details/123301973?spm=1001.2014.3001.5502tip:ngnix默认访问的端口号是80
防火墙放开80端口后即可访问ip地址,如果出现ngnix的欢迎页,即为配置成功
7.nginx.conf 配置文件
根据上述文件,我们可以很明显的将 nginx.conf 配置文件分为三部分:
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。 比如上面第一行配置的:
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
第二部分:events块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。 上述例子就表示每个 work process 支持的最大连接数为 1024. 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。 需要注意的是:http 块也可以包括 http全局块、server 块。
①、http 全局块
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
②、server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
1、全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
2、location 块
一个 server 块可以配置多个 location 块。 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
8.高可用的集群
暂时用不到,具体学习可参照下面的博客
主要步骤
1.需要两台服务器
2.通过yum安装keepalived
3.修改keepalived的配置文件
4.添加检测脚本
5.开启ngnix和keepalived
6.进行测试
9.Ngnix的原理
参考大佬文档,ngnix的一些原理小细节