nginx学习笔记


title: nginx新手入门详解
date: 2021-07-19 18:56:13

Nginx简介

一个项目或平台,用户使用量少,并发量小的情况下,一台 Tomcat 服务器就可以满足需求。但当平台用户量增多,并发量增大时,一台 Tomcat 服务器就不能够很好地支撑。于是就需要做横向扩展,多增加几台服务器,并设置一个代理服务器。用户如果要访问平台首先会经过代理服务器,代理服务器实现处理用户的请求和转发到真实服务器,也就是反向代理。在做横向扩展后,每台服务器的大小、性能可能各不相同。代理服务器需要根据用户的请求,服务器的状态等实际情况实现选择和转发,也就是负载均衡。
在这里插入图片描述

Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 pe rl 、 php
等。但是不支持 java 。 Java 程序只能通过与 tomcat 配合完成。 Nginx 专为性能优化而开发,
性能是其最重要的考量 实现上非常注重效率 ,能经受高负载的考验 有报告表明能支持高
达 50,000 个并发连接数。

Tomcat 只支持 500~600 个响应。

Nginx因为多个worker机制非常有利于热部署

Nginx常用命令

  1. 启动:

    • Windows:在Nginx根目录下执行命令nginx.exe或者直接双击nginx.exe
    • Linux:在sbin目录下执行命令./nginx
  2. 关闭命令:在sbin 目录下执行 ./nginx s stop

  3. 重新加载配置文件:在sbin 目录下执行 ./nginx s reload

Nginx配置文件

Nginx配置文件是cong目录下的nginx.config

配置文件有四个代码块:

  • 全局代码块

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。例如:

# 这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
worker_processes  1;
  • events代码块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

events {
    worker_connections  1024; # 表示每个 work process 支持的最大连接数为 1024.
}
  • http代码块

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http全局块、server 块。

  • server代码块

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

  1. 全局server块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
  2. location块:一个 server 块可以配置多个 location 块。
 server {
        listen       80; #监听端口
        server_name  localhost; #主机名,如果请求中的ip是该主机名,则nginx就会进入这个server块,根据下面的策略进行转发

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / { #代表根目录,即请求为localhost:80,nginx匹配以下策略
            root   html;
            index  index.html index.htm;
            # 转发的url地址
            proxy_pass http://localhost:8080; 
        }

正向代理

正向代理是用户手动给浏览器添加代理,通过代理服务器去访问目标服务器。也就是我们常用的“梯子”,需要打开VPN手动选择节点,才能访问目标资源。
在这里插入图片描述

反向代理

反向代理对于客户端是无感知的,客户端只需要发出请求,然后在代理服务端对该请求进行转发,去访问目标服务器。转发的这一过程服务端对客户端是隐藏的,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
在这里插入图片描述

负载均衡

客户端发送多个请求到服务器,服务器处理请求再将结果返回给客户端。这种方式是相对单一的,仅适用于并发量不高的情况。如果在高并发情况下,服务器一般不只有一个,往往是一个服务器集群。而负载均衡就是Nginx按照一定的规则将多个请求平均分配到各个服务器中,以减轻单个服务器的压力。

负载均衡一般有几种内置策略:

  1. 轮询(默认):nginx按照时间先后顺序平均将请求分配到各个服务器中,同时nginx还会自动过滤掉那些宕机的服务器。
    在这里插入图片描述
#在http代码块和server块中配置加权
#配置对应主机的转发策略,默认轮询
upstream doMain{
    	     server 127.0.0.1:8080;
    	     server 1.15.245.21:8080;
    	}

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            #配置策略
            proxy_pass http://doMain; 
        }
  1. 加权:可以在配置文件中给每个服务器设置权重,届时nginx将按照权重的大小分配请求数量,权重越大分配的请求就越多。

在这里插入图片描述

#在http代码块和server块中配置加权
#配置对应主机的转发策略,weight是权重
upstream doMain{
    	     server 127.0.0.1:8080 weight=1;
    	     server 1.15.245.21:8080 weight=2;
    	}

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            #配置策略
            proxy_pass http://doMain; 
        }
  1. ip_hash:每个请求按照ip的hash结果分配,这样就会每个访客固定访问一个后端服务器,可以解决session问题。
    在这里插入图片描述
#配置iphash
upstream doMain{
    		ip_hash;
    	     server 127.0.0.1:8080;
    	     server 1.15.245.21:8080;
    	}

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            #配置策略
            proxy_pass http://doMain; 
        }
  1. fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream doMain{
    	     server 127.0.0.1:8080;
    	     server 1.15.245.21:8080;
    		 fair;
    	}

动静分离

动静分离不是简单的将动态资源和静态资源简单的分离开来,而是将静态请求和动态请求分开。一般来说,通常将静态资源通过nginx服务器直接返回,动态资源需要nginx转发给Tomcat服务器访问数据库进行处理。

在这里插入图片描述

Nginx的原理

Nginx每当请求会转发到master上,而当master收到新请求后worker会对新请求进行争抢。每一个worker都是一个独立的进程。

在这里插入图片描述
在这里插入图片描述

master-workers 的机制的好处

  • 首先,对于每个worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断, master 进程则很快启动新的worker 进程。当然, worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。

设置 worker 数和服务器的 cpu数相等是最为适宜的。设少了会浪费 cpu ,设多了会造成 cpu 频繁切换上下文带来的损耗。

#设置 worker 数量。

  • worker_processes 4

#work绑定 cpu(4 work 绑定 4cpu) 。

  • worker_cpu_affinity 0001 0010 0100 1000

连接数worker_connection

  • 这个值是表示每个worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes 。当然,这里说的是最大连接数,对于HTTP 请求本地资源来说,能够支持的最大并发数量是 worker_connections *worker_processes ,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes /2 ,而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。

高可用

类似于Redis的主从复制,一般为了防止Nginx挂掉,会设置从机,当主机Nginx挂掉后会通过脚本让从机生效,防止Nginx挂掉后服务直接崩溃
在这里插入图片描述

小结

我视频教程是在B站上看的尚硅谷的Nginx教学,讲的还挺细,个人认为挺适合新手入门

尚硅谷视频教程

还在网上看了一些别人写的博客,我觉得写得挺好的,可以作为参考

博客参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pymj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值