Nginx

1、入门

1.1、什么是Nginx?

  • 高性能的HTTP和反向代理的web服务器
  • 支持热部署,数个月不间断运行
  • 占有内存少,并发能力强
  • 专为性能优化而开发非常注重效率,能经受高负载的考验
  • 有报告表明能支持高达5w的并发数

1.2、反向代理

正向代理:

  1. Nginx不仅可以做反向代理实现负载均衡,还能做正向代理进行上网等功能。
  2. 如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器,这种代理服务称为正向代理

image-20211204130705116

反向代理:

  1. 客户端对代理无感知的,因为客户端不需要任何配置就可以访问
  2. 我们只需将请求发送到反向代理服务器,由ta去选择目标服务器获取数据后,返回给客户端
  3. 此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理的地址,隐藏真实服务器的IP

1.3、负载均衡

有多个真实服务器,请求会先经过代理服务器,然后由某种算法合理分配到其中的一个。

image-20211204132949530

1.4、动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器解析,降低当服务器的压力

image-20211204132840787

2、使用

2.1、安装

环境要求:

  • pcre-8.37.tar.gz
  • openssl-1.0.1t.tar.gz
  • zlib-1.2.8.tar.gz
  • nginx-1.11.1.tar.gz

Nginx中文官网:https://www.nginx.cn/install

Docker安装nginx

随便启动一个nginx实例,复制出配置

docker run -p 80:80 --name nginx -d nginx:1.10

将容器内的配置文件拷贝到当前目录

docker container cp nginx:/etc/nginx .

修改文件名称

mv nginx conf

将conf移动到/mydata/nginx
终止原容器

docker stop nginx
docker rm ContainerId

进入/mydata/nginx/html/

vim fenci.txt
自定义词汇
vim /mydata/elasticsearch/plugins/config/ik/config/IKanalyzer.cfg.xml

扩展字典地址修改为http://ip/es/fenci.txt
创建新的nginx

docker run -p 80:80 \
--name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10

2.2、常用命令

  1. 查看版本号:./nginx -v
  2. 停止服务:./nginx -s stop
  3. 开启服务:./nginx
  4. 查看是否开启:ps -ef | grep nginx
  5. 重加载服务:./nginx -s reload

2.3、nginx.conf

  • nginx的配置文件
  • 分为三部分:
    • 全局
    • events块
    • http块

全局块

  • 主要设置一些影响nginx整体运行的指令
  • 主要包括:
    • 用户组
    • 允许生成的workere process数
    • 进程PID存放路径
    • 日志路径和类型
    • 配置文件的引入等
  • worker_processes
    • 值越大,能处理的并发量越多
    • 会受到硬件和软件等设备的约束

events块:

  • 主要配置Nginx与用户的网络连接的指令
  • 主要包括:
    • 是否开启对多
    • work process下的网络连接进行序列化
    • 是否允许同时接收多个网络连接
    • 选取哪种事件驱动模型来处理连接请求
    • 每个work proess可以同时支持的最大连接数
  • worker_connnections:每个work process支持的最大连接数

http块:

  • 包括http全局块和server

  • http全局块指令:

    • 文件引入
    • MIME-TYPE定义
    • 日志自定义
    • 连接超时时间
    • 单链接请求数上限等
  • server块:

    • 与虚拟主机密切相关
    • 虚拟主机从用户角度看,与一台独立硬件主机完全一样,该技术的产生是为了节省互联网服务器硬件成本
    • http块可包括多个server块,而每个server块据相当于一个虚拟主机
    • 每个server块分为全局server块以及多个location块
    • 全局server块:
      • 本主机的监听配置和名称或IP配置
    • location块
      • 主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也能使IP别名)之外的字符串(例如/uri-string)进行匹配
      • 对特定的请求进行处理
      • 地址定向
      • 数据缓存
      • 应答控制
      • 第三方模块的配置

2.4、反向代理

假设有三个域名:

  1. www.test1.com
  2. www.test2.com
  3. www.test3.com

nginx.conf配置:

server{
  listen 80;
  server_name www.test1.com;
  location / {
    root html;
    proxy_pass http://ip:端口1; #转发到此端口1
    index index.html index.htm;
  }       
}

server{
  listen 80;
  server_name www.test2.com;
  location / {
    root html;
    proxy_pass http://ip:端口2; #转发到此端口2
    index index.html index.htm;
  }       
}

server{
  listen 80;
  server_name www.test3.com;
  location / {
    root html;
    proxy_pass http://ip:端口3; #转发到端口3
    index index.html index.htm;
  }       
}

2.5、负载均衡

nginx.conf:

server{
  listen 80;
  server_name ip;
  location / {
    root html;
    proxy_pass http://myserver;
    index index.html index.htm;
  }       
}

分配策略:

  • 轮询(默认):

    • 每个请求按照时间顺序逐一分配到不同的服务器,若服务器down掉,自动剔除

    • upstram myserver{
      	server ip:8080;
      	server ip:8081;
      }
      
  • weight:

    • 权重,默认为1,权重越高被分配的请求越多

    • 指定轮询几率,用于性能不均的情况

    • upstram myserver{
      	server ip:8080 weight=5;
      	server ip:8081 weight=10;
      }
      
  • ip_hash:

    • 每个请求按访问ip的hash分配

    • 每个客户固定访问一个服务器

    • 可以解决session共享问题

    • upstram myserver{
      	ip_hash;
      	server ip:8081;
      	server ip:8081;
      }
      
  • fair(第三方):

    • 按后端服务器的响应时间来分配

    • 时间短的优先分配

    • upstream myserver{
      	server ip:8080;
      	server ip:8081;
      	fair;
      }
      

2.7、动静分离

动静分离有两种方式:

  • 一种是动静放在不同服务器,也是目前主流的方案

  • 第二种是动静混合,通过nginx分开,指定location不同的后缀实现不同的转发。设置expires参数,可以使浏览器缓存过期时间。也就是说无需服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外流量。此方法适合经常变动的资源。值为3d表示缓存3天,每次发送请求对比该文件的最后更新时间,若无变化则不会抓取,返回304,若修改,直接重新下载,返回200;

有两个文件

/data/image/a.jpg

/data/www/b.html

nginx.conf配置:

server{
	listen 80;
	server_name ip;
	location /www/ {
		root /data/;
		index index.html index.htm;
	}
	location /image/ {
		root /data/;
		autoindex on;# 它的作用为当访问这个路径时,显示文件
	}
}

2.8、高可用集群

image-20211204205321493
  1. 需要两台nginx服务器

    112.124.32.136

    121.40.40.202

  2. 需要keepalived

    #ubantu
    sudo apt install keepalived -y
    
  3. 需要虚拟ip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值