Nginx知识总结

时间:2022-04-02 01:16:16


1、什么的nginx?

Nginx是高性能的HTTP和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,由报告表明能支持高达50000哥并发连接数。在实际的使用中,tomcat大约能支持500个并发连接数,nginx大约能支持5000个并发连接数

2.1、正向代理

需要在客户端配置代理服务器进行指定网站访问

Nginx知识总结

2.2、反向代理 

客户端将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据,在返回给客户端。在客户端看来,反向代理服务器和目标服务器就是一个服务器,暴露给客户端的就是代理服务器地址,隐藏了真实服务器IP地址。

Nginx知识总结

3、负载均衡

由于网站的访问并发量太大,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器,将原先请求集中到单个服务器上的情况改为分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

Nginx知识总结

但是有一个问题,反向代理服务器要怎样分发给服务器才能使得性能最高呢?是平均分配吗?如果服务器的性能不一样怎么办?这时候就需要了解负载均衡的算法了。我集中总结了负载均衡的算法:javascript:void(0)

4、动静分离

为了加快网站的解析速度,可以把动态资源(比如jsp,servlet等)和静态资源(比如html,css等)由不同的服务器来解析,加快解析速度。降低原理单个服务器的压力。

Nginx知识总结

5、nginx.conf配置文件

无论nginx安装在windows还是linux,其配置文件都在nginx目录下的conf目录下。

Nginx知识总结

配置文件中#开头的,均为注释内容。

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服务器)

过程分析:

Nginx知识总结

具体配置:

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

                     

                                                

Nginx知识总结

 

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、开发端口或关闭防火墙

Nginx知识总结

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 高可用集群(主从模式)

Nginx知识总结

10、Keepalived+Nginx 高可用集群(双主模式)

Nginx知识总结

11、Nginx原理

11.1、master和worker

运行nginx后,实际上有两个进程,一个master,一个是worker。master不代理服务器,主要是管理worker。

Nginx知识总结

11.2、worker如何进行工作的

worker首先要去争抢请求,而非轮询。争抢到了请求,再去反向代理到tomcat。

Nginx知识总结

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。