1、概念与应用

  1. 反向代理
    • 正向代理


在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。客户端主动配置或设置代理服务器。
全面掌握Nginx,你学废了么? - 图1

  • 反向代理


客户端不需要配置代理服务器,反向代理服务器会根据客户端不同的请求,转发到不同的实际服务器中去,然后由反向代理服务器返回给客户端。客户端对服务器处理无感知。暴露的是反向代理服务器,隐藏了实际服务器的ip和端口。
全面掌握Nginx,你学废了么? - 图2

  1. 动静分离
    加快网页解析速度,将动态页面和静态页面在不同服务器上保存,加快解析速度。
    全面掌握Nginx,你学废了么? - 图3
    4、高可用
    解决tomcat服务器宕机、nginx服务器本身宕机导致访问失败的问题。

2、安装

2.1、安装依赖包gcc、pcre-devel、zlib-devel、openssl-devel

  1. yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

2.2、下载nginx

nginx下载地址:https://nginx.org/download/

  1. ## 解压
  2. tar -zxvf nginx-1.9.9.tar.gz
  3. ##进入nginx目录
  4. cd nginx-1.9.9
  5. ## 配置
  6. ./configure --prefix=/usr/local/nginx
  7. # make
  8. make && make install

2.3、配置nginx.conf

  1. # 打开配置文件
  2. vi /usr/local/nginx/conf/nginx.conf

修改端口和服务器ip

全面掌握Nginx,你学废了么? - 图4

2.4、启动nginx

  1. /usr/local/nginx/sbin/nginx -s reload

如果出现报错:nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed

则运行:

  1. /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

再次启动即可!

2.5、查看nginx进程是否启动

  1. ps -ef | grep nginx

全面掌握Nginx,你学废了么? - 图5

2.6、web查看

全面掌握Nginx,你学废了么? - 图6


3、常用命令

所有命令都必须进入到usr/local/nginx/sbin目录下执行

1、查看版本号

  1. ./nginx -v

2、关闭nginx

  1. ./nginx -s stop

  1. pkill -9 nginx

3、启动nginx

  1. ./nginx

4、重新加载nginx

  1. ./nginx -s reload

4、反向代理设置1

效果:访问反向代理服务器地址后页面转发到其他网址

配置nginx.conf 添加proxy_pass 值为需要nginx转发的地址

  1. proxy_pass http://127.0.0.1:8089;

2、重新加载nginx

  1. ./nginx -s reload

5、反向代理设置2

效果:目标服务器有多个tomcat,

当用户访问路径中包含edu则访问端口为8080的tomcat

当用户访问路径中包含vod则访问端口为8081的tomcat

1、核心配置

  1. server{
  2. listen 9132;
  3. server_name 112.126.60.66;
  4. location ~/edu/{
  5. proxy_pass http://127.0.01:8080;
  6. }
  7. location ~/vod/{
  8. proxy_pass http://127.0.0.1:8081;
  9. }
  10. }

2、配置说明

  • ~:表示url包含正则表达式,并区分大小写
  • ~*:表示url包含正则表达式,并且不区分大小写
  • =:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
  • ^~:用于不含正则表达式的uri前,要求nginx服务器找到标志uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配

6、负载均衡

1、http块加入配置

  1. upstream 自定义名称{
  2. server ip:port;
  3. server ip:port;
  4. }

2、server—location配置proxy_pass

  1. location /{
  2. proxy_pass http://自定义名称
  3. }

3、分配策略

a、轮询(默认)

每个请求按照实际顺序之一分配到不同服务器,如果服务器宕机,会自动剔除

b、weight

权重。默认为1,权重越高被分配客户端越高。

  1. upstream 自定义名称{
  2. server ip:port weight=10;
  3. server ip:port weight=5;
  4. }

c、ip_hash

每个请求按照访问ip的hash结果分配,这也每个访客固定访问一个后端服务器,可以解决session问题。

  1. upstream 自定义名称{
  2. ip_hash;
  3. server ip:port;
  4. server ip:port;
  5. }

d、fair(第三方)

按后端服务器的响应时间分配服务器,响应时间越短,越优先分配。

  1. upstream 自定义名称{
  2. server ip:port;
  3. server ip:port;
  4. fair;
  5. }

7、动静分离

动态请求和静态请求(html、css、image等)分开

为什么?提高访问效率

Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求和静态请求分开,可以理解成使用Nginx处理静态页面,tomcat处理动态页面。动静分离冲目前实现角度来讲大致分为两种:

一种是存粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;

另外一种方法就是动态跟静态文件混合在一起发布,通过nginx来分开。

通过location指定不同的后缀名实现不同的请求转发,通过 expires 参數设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量,具体 expires 定 义:是给一个资源设定一个过期时间,也就是说无需去服务端证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,此种方法非常适合不经常变动的资源。〈如果经常更新的文件,不建议使用expires 来缓存〉,我这里设置3(1,表示在这3天之内访问这个url,发送一个请求.比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,則直接从取务器重新下载,返回状态码200。


8、高可用

当tomcat宕机后nginx会自动排除宕机服务器,采用正常的tomcat访问。nginx宕机呢?

方案:提供主备nginx两台服务器,用keepalived做路由提供访问。当主nginx服务器宕机后会自动切换到备用nginx服务器上。

全面掌握Nginx,你学废了么? - 图7
全面掌握Nginx,你学废了么? - 图8

1、配置高可用准备工作

  1. a、准备两台nginx服务器
  2. b、安装nginx
  3. c、安装keepalived

2、在两台nginx服务器上安装keepalived

  1. yum install keepalived -y

keepalived安装位置为:/etc/keepalived

3、完成高可用配置

修改/etc/keepalived/keepalived.conf文件

  1. global_defs {
  2. notification_email {
  3. root@networkquestions.org #定义报警邮件
  4. }
  5. notification_email_from warn@networkquestions.org #定义发件人
  6. smtp_server localhost #指定smtp服务器,这里直接改为localhost
  7. smtp_connect_timeout 30 #smtp连接超时时间
  8. router_id 112.126.60.166 #标识id,通常为 hostname,当前部署机器的IP
  9. vrrp_skip_check_adv_addr
  10. vrrp_garp_interval 0
  11. vrrp_gna_interval 0
  12. }
  13. vrrp_script chk_nginx {
  14. script "/etc/keepalived/nginx_check.sh"
  15. interval 3 #(检测脚本执行的间隔)
  16. weight 2 #执行sh后,修改当前服务器权重
  17. }
  18. vrrp_instance VI_1 {
  19. state MASTER #设置为主服务器,备用服务器应设置为BACKUP
  20. interface eth0 #定义虚拟ip绑定接口 ifconfig命令查询
  21. virtual_router_id 51 #VRRP组名,两个节点必须一样,指明各个节点属于同一VRRP组
  22. mcast_src_ip 112.126.60.66 #发送多播包的地址,如果不设置默认使用绑定的网卡
  23. priority 100 #优先级,必须高于从服务器
  24. advert_int 1 #组播信息发送间隔,检测nginx状态,两个节点设置必须一样
  25. authentication { #认证,默认即可。主从需一致。
  26. auth_type PASS
  27. auth_pass 1111
  28. }
  29. track_script {
  30. chk_nginx
  31. }
  32. virtual_ipaddress {
  33. 112.126.60.88 #绑定的虚拟ip,可以绑定多个,换行填写
  34. }
  35. }

编写nginx状态检测脚本 /etc/keepalived/nginx_check.sh,如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程,keepalived将虚拟 ip 绑定到 BACKUP 机器上。内容如下:

  1. #!/bin/bash
  2. A=`ps -C nginx –no-header |wc -l`
  3. if [ $A -eq 0 ];then
  4. /home/wangzi/soft/nginx/sbin/nginx
  5. sleep 5
  6. if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  7. killall keepalived
  8. fi
  9. fi

4、启动nginx和keepalived

keeplived启动命令:

  1. systemctl start keepalived.service

启动检查:

  1. ps -ef | grep keepalived

全面掌握Nginx,你学废了么? - 图9

停止keepalived服务:

  1. systemctl stop keepalived.service

9、nginx原理

1、Master&&Worker
全面掌握Nginx,你学废了么? - 图10

全面掌握Nginx,你学废了么? - 图11

2、worker争抢工作

全面掌握Nginx,你学废了么? - 图12

3、一个master多个work好处

  1. a、使用nginx -s reload热部署,重新加载后空闲work会更新配置,不影响有任务的work
  2. b、每个work是独立进程的,如果有其中一个work出现问题,其他work相对独立,可以继续争抢request,实现请求过程,不会服务中断。

4、设置多少个work?

  1. 与服务器cpu核数相等最好。<br />![](https://img-blog.csdnimg.cn/20200429153023505.png#height=157&id=yr9jA&originHeight=157&originWidth=422&originalType=binary&ratio=1&status=done&style=none&width=422)<br />5、连接数worker_connection

全面掌握Nginx,你学废了么? - 图13
a、发送一个请求,占用worker几个连接数

  1. (静态请求)2个或者(动态请求)4
  2. bnginx有一个master,四个worker,每个woker支持的最大连接数是1024,支持的最大并发数是多少?
  3. 普通的静态访问最大并发数:worker_connection*woker_processes/2=2048
  4. http反向代理,最大并发数: worker_connection*woker_processes/4=2014

841d674cbdc91d10fe814c1a217c37e8.jpg