1、什么的nginx?
Nginx是高性能的HTTP和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,由报告表明能支持高达50000哥并发连接数。在实际的使用中,tomcat大约能支持500个并发连接数,nginx大约能支持5000个并发连接数
2.1、正向代理
需要在客户端配置代理服务器进行指定网站访问
2.2、反向代理
客户端将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据,在返回给客户端。在客户端看来,反向代理服务器和目标服务器就是一个服务器,暴露给客户端的就是代理服务器地址,隐藏了真实服务器IP地址。
3、负载均衡
由于网站的访问并发量太大,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器,将原先请求集中到单个服务器上的情况改为分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
但是有一个问题,反向代理服务器要怎样分发给服务器才能使得性能最高呢?是平均分配吗?如果服务器的性能不一样怎么办?这时候就需要了解负载均衡的算法了。我集中总结了负载均衡的算法:javascript:void(0)
4、动静分离
为了加快网站的解析速度,可以把动态资源(比如jsp,servlet等)和静态资源(比如html,css等)由不同的服务器来解析,加快解析速度。降低原理单个服务器的压力。
5、nginx.conf配置文件
无论nginx安装在windows还是linux,其配置文件都在nginx目录下的conf目录下。
配置文件中#开头的,均为注释内容。
nginx.conf可以分为三部分:
5.1、全局块
从配置文件开始到 events 块之间的内容。
主要会设置一些影响 nginx 服务器整体运行的配置指令,
主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,
进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的:
worker_processes 1;
5.2、events块
events {
worker_connections 1024;
}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,
常用的设置包括是否开启对多 work process
下的网络连接进行序列化,是否允许同时接收多个网络连接,
选取哪种事件驱动模型来处理连接请求,每个 wordprocess 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
5.3、http块
5.3.1、http全局块:http全局块配置的指令包括文件引入,MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
5.3.2、server块:这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一*立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
1)全局 server 块 :最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
2)location 块 :一个 server 块可以配置多个 location 块。 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
这算是 Nginx 服务器配置中最频繁的部分,
代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
6、nginx配置实例-反向代理实例1
实现效果:
使用 nginx 反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080(tomcat服务器)
过程分析:
具体配置:
1、在linux下开启tomcat
进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器
(
windows下输入ip:8080看是否能访问到。
无法访问的原因:
1、ip地址错误
在linux下输入ifconfig查看ip地址
2、未开发8080端口
可以关闭linux的防火墙
也可以直接设置-开发8080端口
具体做法参考:https://blog.csdn.net/qq_42391248/article/details/105415581
)
2、配置window下的hosts文件
hosts文件地址在C:\Windows\System32\drivers\etc
在最下面加上 ip地址 www.123.com
比如:192.168.163.130 www.123.com
(
如果不能修改(权限不够),就开启修改的权限。
右键hosts,点击属性-->安全-->选中组或用户名里的Users-->编辑
--->选中组或用户名里的Users--->勾选下面的修改权限--->确认
)
完成之后,可以测试以下,windows下输入www.123.com:8080看是否能访问到tomcat。
3、配置nginx.conf
server_name填你的ip地址
在location下加:proxy_pass http://127.0.0.1:8080;
(这个配置使得nginx代理tomcat)
4、启动nginx
cd /usr/local/nginx/sbin
./nginx
5、测试
windows下输入www.123.com
如果没有配置host文件,就输入nginx的服务器地址,也能看到tomcat
7、nginx配置实例-反向代理实例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
配置步骤:
1、开启两个tomcat服务器
2、在两个tomcat里面webapps目录中分别创建edu和vod文件夹,分别放置两个页面
3、配置nginx
4、开发端口或关闭防火墙
8、nginx配置实例-负载均衡实例
实现效果:
浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8080和 8081 端口中
配置步骤:
1、准备两台 tomcat 服务器,一台 8080,一台 8081
2、在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建页面 a.html,用于测试
3、nginx 的配置文件中进行负载均衡的配置
在http全局块中配置:
upstream myserver{
server 192.168.163.130:8080;
server 192.168.163.130:8081;
}
在server的location下配置:
proxy_pass http://myserver
ps:负载均衡策略默认的是轮询
负载均衡策略:
weight配置:
upstream server_pool{
server 192.168.163.130:8080 weight=10;
server 192.168.163.130:8081 weight=10;
}
Ip_hash配置:
upstream server_pool{
ip_hash
server 192.168.163.130:8080;
server 192.168.163.130:8081;
}
测试:
192.168.163.130/edu/a.html
每次刷新页面,就会分别给两个服务器发请求
9、Keepalived+Nginx 高可用集群(主从模式)
10、Keepalived+Nginx 高可用集群(双主模式)
11、Nginx原理
11.1、master和worker
运行nginx后,实际上有两个进程,一个master,一个是worker。master不代理服务器,主要是管理worker。
11.2、worker如何进行工作的
worker首先要去争抢请求,而非轮询。争抢到了请求,再去反向代理到tomcat。
11.3、一个 master 和多个 woker 有好处
1)可以使用nginx -s reload 热部署,利用nginx进行热部署操作。
2)每个worker是独立的进程,如果有其中的一个woker出现问题,
其他woker独立的,继续进行争抢,实现请求过程,不会造成服务器中断。
11.4、设置多少个 woker 合适
worker 数和服务器的 cpu 数相等是最为适宜的
11.5、连接数 worker_connection
第一个:发送请求,占用了 worker 的几个连接数?
答案:2 或者 4 个(client和worker两个连接,worker和tomcat两个连接)
第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?
4*1024/2或者4*1024/4
普通的静态访问最大并发数是: worker_connections * worker_processes /2,
而如果是 HTTP 作 为反向代理来说,
最大并发数量应该是 worker_connections *worker_processes/4。