Nginx基础入门学习笔记

Nginx是一个高性能的HTTP和反向代理web服务器,是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强等。

特点

1. 反向代理
  1. 正向代理(代理用户)

  2. 反向代理(代理服务器)
    客户端只需要知道反代理服务器的地址,而不需要知道它后面的多个tomcat服务器的地址。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZUziaZt-1588155319886)(evernotecid://FAF77448-9F2F-4F01-8F96-D9C8A399725D/appyinxiangcom/28816821/ENResource/p175)]

2. 负载均衡

增加服务器的数量,以降低对单个服务器的负载。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fm1McA7j-1588155319888)(evernotecid://FAF77448-9F2F-4F01-8F96-D9C8A399725D/appyinxiangcom/28816821/ENResource/p176)]

负载均衡策略

在这里插入图片描述

添加负载均衡后,要在location / {...}中加入proxy_pass http://myserver;。(myserver为定义的负载均衡列表名)

  1. 轮询:默认方式(缺省配置)
    在轮询中,如果服务器down掉了,会自动剔除该服务器。
upstream myserver {
        server  10.211.55.17:8080;
        server  10.211.55.17:8081;
}
  1. weight:权重方式
    weight参数用于指定轮询几率,weight的默认值为1。weight越大,被访问的比率越大。
upstream myserver {
        server  10.211.55.17:8080 weight=5;
        server  10.211.55.17:8081 weight=10;
}
  1. ip_hash:依据ip分配方式
    客户端第一次访问到哪个服务器,之后会一直访问同一个服务器。也解决的session不能跨服务器的问题。
upstream myserver {
		ip_hash;
        server  10.211.55.17:8080;
        server  10.211.55.17:8081;
}
  1. least_conn:最少连接方式
    把客户端的请求发给连接比较少的服务器,使服务器整体负载相同。
upstream myserver {
		least_conn;
        server  10.211.55.17:8080;
        server  10.211.55.17:8081;
}
  1. fair(第三方):响应时间方式
    按照服务器端的响应时间来分配请求,响应时间短的优先分配。
upstream myserver {
        server  10.211.55.17:8080;
        server  10.211.55.17:8081;
        fair;
}
  1. url_hash(第三方):依据URL分配方式
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,配合缓存使用。
upstream myserver {
		hash $request_uri;
        server  10.211.55.17:8080;
        server  10.211.55.17:8081;
}
3. 动静分离

把静态资源和动态资源分别放在不同服务器上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YP2Qomgc-1588155319889)(evernotecid://FAF77448-9F2F-4F01-8F96-D9C8A399725D/appyinxiangcom/28816821/ENResource/p177)]
在这里插入图片描述

4. 高可用

高可用是为了解决只有一台nginx时,如果此时客户端发送请求,而nginx宕机了,请求就无法到达tomcat的问题。高可用是设置从nginx,如果主nginx宕机了,那么备nginx来实现反代理。
因为两个nginx的ip都是不一样的,所以对外需要一个虚拟ip,keepalived把虚拟ip挂到nginx1上,然后如同一个哨兵,检查nginx1的状态。当nginx1宕机了,keepalived就会把虚拟ip挂到nginx2上。
在这里插入图片描述

nginx常用命令

  1. cd /usr/local/nginx/sbin 进入nginx目录

  2. ./nginx -v 查看nginx的版本号
    在这里插入图片描述

  3. ./nginx 开启nginx
    在这里插入图片描述

  4. ./nginx -s stop 停止nginx
    在这里插入图片描述

  5. ./nginx -s reload 重新加载nginx

如果出现下面这种错误,需要用./nginx -c /usr/local/nginx/conf/nginx.conf指定配置文件重启。此时,nginx目录下的logs目录会生成nginx.pid文件,就可以使用./nginx -s reload命令重新加载nginx了。
在这里插入图片描述

nginx.conf配置文件

nginx.conf配置文件在nginx目录下的conf目录下,内容由全局块、events块和http块三部分组成。

建议拷贝一份nginx.conf,防止出现问题时恢复不了。
在这里插入图片描述

1. 全局块

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

#user nobody; 配置用户或者组,默认nobody
worker_processes 1; 允许生成的进程数,默认为1。
#error_log logs/error.log; 制定日志路径
#pid logs/nginx.pid; 指定nginx进程运行文件存放地址

2. events块

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

worker_connections 1024; 支持的最大连接数,默认1024

3. http块

http块由http全局块和server块组成。

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

  1. http全局块
    在这里插入图片描述

include mime.types; 配置nginx支持哪些扩展名与文件类型映射表。在nginx/conf/mime.types可查看支持的文件类型。
default_type application/octet-stream; 默认文件类型(流),支持很多文件、图片、js/css等。
log_format main 自定义文件格式,默认即可。(文件的打印规则)
sendfile on; 优化参数,允许sendfile方式传输文件,开启高效传输模式。
#tcp_nopush on; 防止网络堵塞。
keepalive_timeout 65; 长连接超时时间(单位秒)
#gzip on; 开启gzip压缩

  1. server块(新版本nginx的server块在nginx.conf文件同个目录下的conf.d目录里的default.conf文件)
    在这里插入图片描述
    listen 80; 监听80端口
    server_name localhost; 监听的地址
    location / { root html; index index.html index.htm; } 在花括号里添加proxy_pass 转发地址;实现页面转发
    在这里插入图片描述

nginx配置实例

需要在centos7下有jdk1.8,tomcat,nginx等环境。

准备工作:
  1. 进入tomcat的bin目录,./startup.sh启动tomcat服务器。(此目录下./shutdown.sh为关闭tomcat)

  2. 进入nginx的sbin目录,./nginx启动nginx服务器(./nginx -s stop为关闭)
    在这里插入图片描述

  3. 开放8080和80端口
    firewall-cmd --add-port=80/tcp --permanent 开放80端口
    firewall-cmd --add-port=8080/tcp --permanent 开放8080端口
    (怕麻烦可临时关闭防火墙:systemctl stop firewalld.service(centos7的命令),临时关闭防火墙就不需要重启防火墙了)
    CentOS7 关闭和开启防火墙

  4. firewall-cmd --reload 重启防火墙(开放新端口后需要重启防火墙)
    firewall-cmd --list-all 查看开放的端口
    在这里插入图片描述

  5. 此时,如果linux下的tomcat和nginx都启动了的话,在外的浏览器输入linux的ip冒号加80就可以访问nginx主页面,加8080就可以访问tomcat主页面。(linux的ip输入ifconfig查看)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

一、反向代理
实例1
需求:

在浏览器中输入www.123.com,页面跳转到linux系统的tomcat主页面。
在这里插入图片描述

  1. 修改本地的host文件,让其在输入www.123.com跳转到10.211.55.17。
    (windows系统的host文件的路径:C:->Windows->System32->drivers->etc->HOSTS)
    打开终端:
    cd /private/etc 进入/private/etc
    sudo vim hosts 进入hosts文件,需要权限(输入本机密码)
    在这里插入图片描述
    回车进入
    在这里插入图片描述
    :wq! 强制保存退出
  2. 然后在浏览器中输入www.123.com,页面成功跳转到10.211.55.17:80。
    在这里插入图片描述
配置nginx.conf文件
  1. 把http块下面server块里的server_name修改为linux的ip。
    在这里插入图片描述
  2. 然后在其下面几行的location / {...}中加入proxy_pass http://127.0.0.1:8080;让其跳转到tomcat的主页面。
    在这里插入图片描述
  3. :wq保存退出后,在浏览器输入www.123.com成功跳转到tomcat的主页面。
    在这里插入图片描述
  4. 如果输入www.123.com后是nginx的主页面,请到nginx的sbin目录下输入./nginx -s reload重启nginx服务器,如果清除浏览器的缓存。
实例2
需求:

根据访问的路径跳转到不同端口的服务中
nginx监听8888端口
访问 http://10.211.55.17:8888/edu/a.html 跳转到127.0.0.1:8080/edu/a.html
访问 http://10.211.55.17:8888/vod/a.html 跳转到127.0.0.1:8081/vod/a.html

准备工作:
  1. 需要两个tomcat来实现我们的需求,所以解压我们的tomcat包。
    在这里插入图片描述
  2. 进入tomcat2的conf目录,修改配置文件server.xml,让两个tomcat不冲突。
    这里以我的配置文件行数为例(一共需要改三处):
  • 修改22行,把8005改为8015。
    在这里插入图片描述

  • 修改69行,把8080改为8081。
    在这里插入图片描述

  • 修改119行,把8009改为8019。(注释也改,以防后面需要用到而忘改。)
    在这里插入图片描述

  1. 然后进入两个tomcat的bin目录,./startup.sh分别启动两个tomcat,进入nginx的sbin目录,./nginx启动nginx。

  2. 添加8081端口。
    firewall-cmd --add-port=8081/tcp --permanent 开放8081端口
    firewall-cmd --add-port=8888/tcp --permanent 开放8888端口
    firewall-cmd --reload 重启防火墙
    firewall-cmd --list-all 查看开放的端口
    在这里插入图片描述

  3. 在浏览器测试
    在这里插入图片描述
    在这里插入图片描述

  4. 页面能打开后,我们需要新建目录和网站,用于等会不同路径的页面跳转。进入tomcat的webapp目录。

    • 第一个tomcat新建edu目录,在目录下新建a.html,
      在这里插入图片描述
      在这里插入图片描述

    • 第二个tomcat新建vod目录,在目录下新建a.html。
      在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
准备工作完成,接下来配置nginx。

配置nginx.conf
  1. 进入nginx/conf/nginx.conf配置文件。在这里插入图片描述
    改为
 87     server {
 88         listen       8888;
 89         server_name  10.211.55.17;
 90 
 91         location ~ /edu {
 92                 proxy_pass http://127.0.0.1:8080;
 93         }
 94         location ~ /vod {
 95                 proxy_pass http://127.0.0.1:8081;
 96         }
 97     }

在这里插入图片描述

  1. 打开浏览器输入10.211.55.17:8888,跳转成功。
    在这里插入图片描述

  2. 访问 http://10.211.55.17:8888/edu/a.html跳转到127.0.0.1:8080/edu/a.html,跳转成功。
    在这里插入图片描述

  3. 访问 http://10.211.55.17:8888/vod/a.html跳转到127.0.0.1:8081/vod/a.html,跳转成功。
    在这里插入图片描述

二、负载均衡
需求:

浏览器中输入http://10.211.55.17/edu/a.html,实效负载均衡的效果,平均8080和8081端口中。

准备工作:

在两个tomcat的webapp目录下分别创建edu目录,在edu目录下创建a.html(之前8080的tomcat已经有edu和a.html了,所以只要在8081的tomcat创建就可以了)。
在这里插入图片描述
在这里插入图片描述

配置nginx.conf
  1. 修改nginx.conf配置文件
 35     upstream myserver {
 36         server  10.211.55.17:8080;
 37         server  10.211.55.17:8081;
 38 
 39     }
 40 
 41     server {
 42         listen       80;
 43         server_name  10.211.55.17;
 44 
 45         #charset koi8-r;
 46 
 47         #access_log  logs/host.access.log  main;
 48 
 49         location / {
 50             proxy_pass http://myserver;
 51             root   html;
 52             #proxy_pass http://127.0.0.1:8080;
 53             index  index.html index.htm;
 54         }

在这里插入图片描述

  1. 重启nginx。(./nginx -s reload
  2. 在浏览器输入http://10.211.55.17/edu/a.html,刷新几次会发现页面在8080和8081之间切换。
    在这里插入图片描述
    在这里插入图片描述
三、动静分离
准备工作:
  1. 新建一个data目录,在里面新建www和image两个目录,在www目录中新建一个a.html用于测试。

在这里插入图片描述
在这里插入图片描述
2. 在Mac的终端往linux的data/image目录复制图片。
scp o1.jpeg root@10.211.55.17:/data/image
在这里插入图片描述
在这里插入图片描述

配置nginx.conf文件:
  1. 修改nginx.conf文件
 40     server {
 41         listen       80;
 42         server_name  10.211.55.17;
 43 
 44         #charset koi8-r;
 45 
 46         #access_log  logs/host.access.log  main;
 47 
 48         location /www/ {
 49             root   /data/;
 50             index  index.html index.htm;
 51         }
 52         location /image/ {
 53             root   /data/;
 54             autoindex   on;
 55         }

在这里插入图片描述

  1. 重启nginx。
  2. 在浏览器中输入http://10.211.55.17/image/,显示出image目录下的内容。
    在这里插入图片描述
  3. 点击o1.jpeg成功跳转。
    在这里插入图片描述
  4. 输入http://10.211.55.17/www/a.html,成功跳转。
    在这里插入图片描述
四、高可用集群

需要两台nginx,一个keepalived脚本,一个虚拟ip。

准备工作:
  1. 两台nginx分别需要对应的linux系统(虚拟机直接使用连接克隆,可以快速获得一台一样的linux)。
    在这里插入图片描述
    在这里插入图片描述
  2. 如果使用克隆,需要把第二台linux中nginx.conf的监控路径改成新的ip。
    在这里插入图片描述
  3. 启动两台nginx,然后在浏览器中测试。
    在这里插入图片描述
    在这里插入图片描述
  4. 在两台服务器上安装keepalived。
    yum install keepalived -y 安装keepalived
    rpm -q -a keepalived 查看安装的keepalived版本
    在这里插入图片描述
修改配置文件:
  1. 先修改主机的keepalived的配置文件。(keepalived配置文件在/etc/keepalived/下)
    加了注释的都是需要改或者重要的(建议先备份一份keepalived.conf)。
  1 ! Configuration File for keepalived
  2 
  3 global_defs {  #全局定义
  4    notification_email {
  5      acassen@firewall.loc
  6      failover@firewall.loc
  7      sysadmin@firewall.loc
  8    }
  9    notification_email_from Alexandre.Cassen@firewall.loc
 10    smtp_server 192.168.200.1
 11    smtp_connect_timeout 30
 12    router_id LVS_DEVEL
 13    vrrp_skip_check_adv_addr
 14    vrrp_strict
 15    vrrp_garp_interval 0
 16    vrrp_gna_interval 0
 17    router_id 10.211.55.17	#访问到本服务器
 18 }
 19 
 20 vrrp_script chk_hhttp_port {    #检测脚本和权重的参数
 21     script      "/usr/local/src/nginx_check.sh" #检测监本(先写个路径,等会再写脚本)
 22     interval    2   #检测脚本执行的间隔
 23     weight      2	#权重
 24 }
 25 
 26 vrrp_instance VI_1 {
 27     state MASTER    #主,备份服务器为BACKUP
 28     interface eth0   #网卡,ifconfig查看ip冒号前面为网卡
 29     virtual_router_id 51  #主、备的virtual_router_id必须相同
 30     priority 100        #优先级,主机的优先级大,备机小
 31     advert_int 1
 32     authentication {
 33         auth_type PASS
 34         auth_pass 1111
 35     }
 36     virtual_ipaddress {
 37         10.211.55.100   #VRRP H虚拟地址
 38     }
 39 }
 40 #       下面可不需要,可以都删了或者注释了
  1. 然后进入/usr/local/src/,新建nginx_check.sh文件。(这里因为使用的是root用户,所以有执行权限。如果是其他用户,需要先给权限)
  1 #!/bin/bash
  2 A=`ps -C nginx -no-header |wc -l`
  3 if [ $A -eq 0 ];then
  4         /usr/local/nginx/sbin/nginx	
  5         sleep 2
  6         if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  7                 killall keepalived
  8         fi
  9 fi
  1. 修改备机的keepalived的配置文件。
    和上面的代码有三处不同:

    • 把17行的10.211.55.17换成10.211.55.20
    • 把27行的MASTER改为BACKUP
    • 把30行的100改为90
    • (用ifconfig查看网卡,如果网卡不同需要改28行)
  2. 然后进入/usr/local/src/,新建nginx_check.sh文件,复制上面代码。

  3. 重启两台nginx。

  4. 先启动nginx再启动keepalived。
    systemctl start keepalived.service
    ps -ef | grep keepalived 查看keepalived进程。
    在这里插入图片描述

  5. 然后在浏览器输入10.211.55.100,页面成功加载出来。
    在这里插入图片描述

  6. 把主机的nginx停止,清除缓存然后重新访问。
    ./nginx -s stop 停止nginx
    在这里插入图片描述

keepalived.conf配置文件

  1. global_defs:全局配置
    最重要是:router_id。通过这个id可以访问到这个服务器,写本机ip。

  2. vrrp_script:脚本配置

    1. script:执行的检测脚本。
    2. interval:检测脚本的执行间隔(单位秒)
    3. weight:权重
  3. vrrp_instance VI_1:虚拟ip配置

    1. state:服务器类型。(主服务器为MASTER,备份服务器为BACKUP)
    2. interface:本机绑定的网卡。
    3. virtual_router_id:主备机的id标识。(主、备的virtual_router_id必须相同)
    4. priority:优先级。(主机的优先级大,备机小)
      advert_int:检测服务器是否存活的时间间隔,默认1秒(单位秒)
      authentication { #权限校验
      auth_type PASS #格式为密码
      auth_pass 1111 #密码为1111
      }
      virtual_ipaddress { #可绑定多个虚拟ip
      10.211.55.100 #VRRP H虚拟地址
      }

nginx原理

  1. master和worker
    nginx启动后会有master和worker两个进程。master只有一个,worker可以有多个,master负责管理分配任务,worker负责执行master分配下来的任务。
    在这里插入图片描述

  2. worker的工作过程
    当client发送请求,首先到master,然后master把请求分担给worker,多个worker采用争抢的方式决定哪个worker获得请求,然后反向代理调用tomcat。
    在这里插入图片描述

  3. 一个master和多个worker的好处

    1. 可以使用nginx -s reload热部署(nginx不需要停止就可以让改过的配置文件生效)。
    2. 每个worker都是独立的进程,不需要加锁,其中如果有一个worker出现问题,其他worker可以继续进行争抢,实现请求过程,保证服务不被中断。
  4. worker数和服务器的cpu数相同最合适。

  5. 连接数worker_connection

    1. 发送请求,占用了worker的几个连接数?
      答案:2个或者4个。
      情况一:如果请求只要静态资源,那么请求到worker,然后worker把资源响应回去,一来一回为2个。
      在这里插入图片描述

      情况二:如果请求需要数据库的数据,那么发送请求到worker,worker发送给tomcat,让tomcat去数据库拿数据,然后,tomcat把数据给worker,worker再把数据响应给客户端,除了之前两个,还有和tomcat一来一回的两次。
      在这里插入图片描述

    2. nginx有一个master,有四个worker,每个worker支持最大的连接数据为1024,支持的最大并发数是多少?
      答: worker最大支持的连接数:4 * 1024
      最大并发数:最大连接数 / (2或4)

  • 普通的静态访问最大并发数是:worker_connection * worker_processes / 2
  • 如果是HTTP作为反代理来说,最大并发数是:worker_connection * worker_processes / 4

学习视频:
https://www.bilibili.com/video/BV1zJ411w7SV?p=1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值