• Nginx——下载,安装,启动,关闭,配置——负载均衡——静态代理——动静分离


    Nginx

    1. Nginx简介

    Nginx (engine x)是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器。
    Nginx是免费开源的,采用C语言开发编写的,同时 Nginx也有收费的商业版本,商业版本提供了性能优化﹑宕机等紧急问题处理等技术支持和服务。

    2. 正向代理和反向代理

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;

    正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。(翻墙)

    3. Nginx 环境搭建

    3.1 下载

    官方开源地址:http://nginx.org/

    在这里插入图片描述

    3.2 安装环境准备

    1. gcc 编译器是否安装
      检查是否安装: yum list installed |grep gcc
      执行安装: yum install gcc -y
      在这里插入图片描述

    2. openssl库是否安装
      查看是否安装:yum list installed | grep openssl
      执行安装: yum install openssl openssl-devel -y
      在这里插入图片描述

    3. pcre 库是否安装
      查看是否安装:yum list installed | grep pcre
      执行安装: yum install pcre pcre-devel -y
      在这里插入图片描述

    4. zlib 库是否安装
      查看是否安装:yum list installed | grep zlib
      执行安装: yum install zlib zlib-devel -y
      在这里插入图片描述

    5. 一次性安装,执行如下命令
      上边需要安装四次真的有些麻烦,下边这条命令直接一次安装多个,如果已经安装就会跳过,没有安装就按执行安装。
      yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y

    3.3 安装-启动-关闭-重启

    3.3.1 将Windows上下载的安装包上传到Linux上

    在这里插入图片描述

    3.3.2 使用命令解压

    tar -zxvf nginx-1.20.2.tar.gz

    在这里插入图片描述

    3.3.3 指定安装目录

    使用配置安装 指定安装的位置为/usr/local/nginx
    在nginx主目录下执行
    ./configure --prefix=/usr/local/nginx
    编译
    make
    安装
    make install
    安装成功
    在这里插入图片描述
    在这里插入图片描述

    3.3.4 启动
    1. 普通启动
      切换到nginx安装目录的sbin目录下,执行:./nginx
      在这里插入图片描述

    2. 通过配置文件启动
      ./nginx -c /usr/local/nginx/conf/nginx.conf

      /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
      -c 是指定配置文件,而且配置文件路径必须指定绝对路径
      在这里插入图片描述

    3. 检查Nginx是否启动
      通过查看进程查看: ps -ef |grep nginx
      nginx 体系结构由master进程和其worker进程组成
      master进程读取配置文件,并维护worker进程,而worker进程则对请求进行实际处理。

    4. 用Windows访问Nginx
      在这里插入图片描述

    3.3.5 关闭

    使用kill杀死进程:kill 12091
    在这里插入图片描述

    3.3.6 重启

    修改配置后需要重启服务(杀死进程,启动服务)
    ./nginx -s reload

    4. 配置检查

    当修改 Nginx配置文件后,可以使用Nginx命令进行配置文件语法检查,用于检查Nginx配置文件是否正确

    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
    在这里插入图片描述

    4.1 查看Nginx版本

    Nginx版本号,编辑器版本和配置参数
    /usr/local/nginx/sbin/nginx -V
    在这里插入图片描述

    4.2 核心配置文件说明

    在这里插入图片描述

    4.2.1 基本配置

    #配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码
    #user  nobody;
    #配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
    worker_processes  1;
    #配置全局错误日志及类型,【debug | info | notice | warn | error | crit】
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid; #配置进程pid文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.2.2 events 配置

    
    #配置工作模式和连接数
    events {
        worker_connections  1024; #配置每个worker进程连接数上限(65535),nginx支持的总连接数就等于worker_processes * worker_connections
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.2.3 http 配置

    #配置http服务器,利用它的反向代理功能提供负载均衡支持
    http {
    		#配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
        include       mime.types;
        #默认文件类型 流类型, 可以理解为支持任意类型
        default_type  application/octet-stream;
    		#配置日志格式
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    		#配置access.log 日志及存放路径,并使用上面定义的main日志格式
        #access_log  logs/access.log  main;
        sendfile  on; #开启高效文件传输模式
        #tcp_nopush  on; #防止网络阻塞
        #keepalive_timeout  0;
        keepalive_timeout  65; #长连接超时时间,单位是秒
    	  #gzip  on; #开启gzip压缩输出
    	  
    	  #配置虚拟主机
    	  server {
            listen       80;  #配置监听端口
            server_name  localhost;  #配置服务名称
    
            #charset koi8-r;   #配置字符集
    
            #access_log  logs/host.access.log  main;  #配合本虚拟主机的访问日志
    
    			 #默认的匹配斜杠/的请求,当访问路径中有斜杠/,会被该localhost匹配到并进行处理
            location / {
            		 #root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
                root   html;
                #配置首页文件名称
                index  index.html index.htm;
            }
            #error_page  404              /404.html;  #配置404页面
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;  #配置50x错误页面
    			 #精准匹配
    			 location = /50x.html {
                root   html;
            }
         }          
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    5. Nginx主要应用

    • 静态网站部署
    • 负载均衡
    • 静态代理
    • 动静分离
    • 虚拟主机

    5.1 静态网站部署

    Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端

    1. 修改nginx.conf配置文件
      在server中,通过localhost匹配访问路径,然后转发给静态资源
    location /ace {
    	 #root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
       root   /opt/www;  #资源放在/opt/www/ace目录下才能访问
       #配置首页文件名称
       index  index.html;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 重启nginx服务
      /usr/local/nginx/sbin/nginx -s reload

    2. 在浏览器上输入http:192.168.0.128:80/进行访问欢迎界面

    3. 在浏览器上输入http:192.168.0.128:80/ace进行访问部署的静态资源

    5.2 负载均衡

    在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。

    负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。

    5.3 负载均衡实现——Nginx

    Nginx通过在nginx.conf文件进行配置即可实现负载均衡

    在这里插入图片描述

    #gzip  on;
    upstream www.myweb.com{
    	server 192.168.0.128:8081;
    	server 192.168.0.128:8082;
    }
    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /myweb {
            proxy_pass http://www.myweb.com;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    其中weight表示权重,用于后端服务器性能不均匀的情况,访问比率约等于权重之比,权重越大访问机会越多

    upstream是配器nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器。

    5.4 Nginx常用负载均衡策略

    1. 轮询(默认)
    2. 权重——weight
    3. 最少连接 least_conn
    4. ip_hash——session不会丢失
      前三个相同的请求,请求多次都会涉及到更换服务器的问题,所有session会丢失。ip_hash策略session不会丢失,它是根据请求的ip计算请求哪个服务器,ip相同请求的服务器不会改变
    5.4.1 轮询(默认)

    注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。如果后端服务器down掉,将自动剔除。
    应用于后端服务器性能均匀的情况

    5.4.2 权重——weight

    每个请求按一定比例分发到不同的后端服务器,weight值越人访回的比例越大,用于后端服务器性能不均的情况,根据服务器的性能分配不同的权重,交替访问。

    在这里插入图片描述

    5.4.3 ip_hash——session不会丢失

    ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话session丢失的问题

    假设我们又两台服务器,那就是ip的hash值对2取模,得到的值是0或1,就去请求服务器0或者服务器1。
    ip不变→ip对应的hash值不变→对2取模的值不变→请求的服务器不变
    算法: hash(“124.207.55.82”)%2=0,1

    在这里插入图片描述

    5.4.4 最少连接 least_conn

    web请求会被转发到连接数最少的服务器上。

    在这里插入图片描述

    5.5 负载均衡其他几个配置

    5.5.1 配置1 backup
    upstream backserver{
    	server 192.168.0.128:8081;
    	#其它所有的非backup机器down的时候,才请求backup
    	server 192.168.0.128:8082 backup;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    5.5.2 配置2 down
    upstream backserver{
    	server 192.168.0.128:8081;
    	#down 表示当前的server是down状态,不参与负载均衡
    	server 192.168.0.128:8082 down;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    一般在项目上线的时候,可以分配部署不同的服务器上,然后对Nginx重新reload。reload不会影响用户的访问,或者可以给一个提示页面,系统正在升级。

    5.6 静态代理

    • 把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx,更擅长于静态资源的处理,性能更好,效率更高。
    • 所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。
      在这里插入图片描述
    5.6.1 Nginx 静态代理实现方式
    1. 方式一 在nginx.conf 的location中配置静态资源的后缀
      例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)

    2. 方式二 在nginx.conf的location中配置静态资源所在目录实现

    5.7 动静分离

    • Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常风的一种场景。

    • 动态资源,如jsp由tomcat或其他web服务器完成

    • 静态资源,如图片、css、js等由nginx,服务器完

    • 它们各司其职,专注于做自己擅长的事情

    • 动静分离充分利用了它们各自的优势,从而达到更高效合理的架构

    在这里插入图片描述

  • 相关阅读:
    [附源码]java毕业设计校园失物招领管理系统
    Quest商店:利用A/B测试,竟可将VR游戏转化率提升26.5%
    Android学习之路(17) Android Adapter详解
    Google 开源库Guava详解(集合工具类)
    (动手学习深度学习)第13章 实战kaggle竞赛:狗的品种识别
    AR眼镜_单目光波导VS双目光波导方案
    Python_15 ddt驱动与日志
    高级深入--day28
    自定义MVC的使用
    day4驱动开发
  • 原文地址:https://blog.csdn.net/qq_45896330/article/details/126795537