nginx深入学习

本文详细介绍了Nginx的安装、配置及应用,包括Nginx的负载均衡策略(轮询、权重、最少连接数、IP哈希),静态代理和动静分离,以及如何利用OpenResty实现高性能的Web服务。同时,还探讨了Nginx的限流策略和在高并发场景下的二级缓存Demo,旨在帮助读者深入理解Nginx在实际应用中的重要性和灵活性。
摘要由CSDN通过智能技术生成

目录

一. nginx简介和安装

二. nginx配置文件介绍

三. nginx的应用

1. 部署静态应用(html应用)

2. nginx负载均衡的实现

2.1. 配置负载均衡

2.2 负载均衡四种策略

2.3 nginx负载均衡的其他配置

3. nginx的静态代理

4. 动静分离

5. 虚拟主机

四. nginx的限流

五. nginx的升级使用openresty

1. openresty的安装

2. lua语言安装

3. 实现demo


一. nginx简介和安装

Linux可以通过RZ、SZ命令完成不通过FTP上传下载文件

1. nginx简介

nginx是异步框架的web服务器。用来作为转发代理服务器使用,常用的功能有反向代理、正向代理、动静分离、虚拟主机、实现负载均衡功能。并且能够优秀的支持高并发大流量。一台普通的nginx服务器可以提供3-5万左右的并发

反向代理:浏览器访问nginx,有nginx转发给指定配置的具有负载均衡设置的不同服务器。

正向代理:浏览器访问某个网站,先访问nginx,有nginx请求该网站后返回给客户端。例如FQ

负载均衡:在通过nginx进来的请求,可以通过负载均衡策略分发到不同的服务器中进行访问。

支持缓存:cache loader/cache manager 将用户相应数据缓存在本地,这对于某些用户请求,就不需要在转发给服务器了直接返回

2. nginx的安装

. 首先安装依赖包:
	gcc、zlib、 pcre、 openssl
	一键安装命令:
	yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
	
2. 创建nginx的安装目录:mkdir /usr/local/nginx/
		cd /usr/local/nginx/
		下载tar包:
		wget http://nginx.org/download/nginx-1.13.7.tar.gz
		解压:
		tar -xvf nginx-1.13.7.tar.gz

3. 安装:
	//进入nginx目录
	cd /usr/local/nginx
	//进入目录
	cd nginx-1.13.7
	//执行命令
	./configure
	//执行make命令
	make
	//执行make install命令
	make install

4. 配置nginx.conf
	
	# 打开配置文件
	vi /usr/local/nginx/conf/nginx.conf
	将监听listen设置为需要监听并交给nginx转发的端口号
	server_name 设置为本服务器的IP地址或者网站域名
	
	 server {
        listen       8089;
        server_name  192.168.1.166;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
	}
	
5. 启动nginx:
	/usr/local/nginx/sbin/nginx -s reload
	如果报错:nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
	则执行:
		 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
	再次
		/usr/local/nginx/sbin/nginx -s reload
	即可
	
6. 通过ip:端口 即可访问nginx的欢迎页面:http://192.168.1.166:8083/

7. 如果访问不到,则是端口号未开放,可以通过关闭防火墙,或者开放所需要的端口即可

	systemctl status firewalld    	#查看防火墙状态
	
	service firewalld start			# 开启

	service firewalld restart       # 重启

	systemctl stop firewalld.service           #停止firewall
 
	systemctl disable firewalld.service     #禁止firewall开机启动
	
	如果不想关闭防火墙,可以通过 开放端口的方式完成远程连接”、
	
      # 查询端口是否开放
            firewall-cmd --query-port=6379/tcp
      # 开放80端口
            firewall-cmd --permanent --add-port=6379/tcp
      # 移除端口
            firewall-cmd --permanent --remove-port=8080/tcp
      #重启防火墙(修改配置后要重启防火墙)
			firewall-cmd --reload
			
再次访问即可

二. nginx配置文件介绍

可以通过include /etc/nginx/conf.d/*.conf  引入多个nginx的配置文件

三. nginx的应用

1. 部署静态应用(html应用)

创建一个server,并设置location指定到自己静态项目所在路径,即可完成访问

此处需要注意一个坑:

location后面的地址,其实就是{}中root指定的路径为根路径进行访问的

同理,其实location / 也是同样的,访问的根路径是/opt/pms/static  /下的文件。

此时,访问当前IP/nginx 就可以访问123.html页面了

2. nginx负载均衡的实现

当部署的应用需要承载很多访问量,我们需要部署多个应用服务器,并且需要将这些访问量分发到这些应用集群一起处理高并发的请求。此时,进行分发不同服务器的技术就叫做负载均衡

 硬件实现负载均衡

常用的负载均衡提供商:F5等,价格很贵,稳定性很高

2.1. 配置负载均衡

如下配置,当访问124.70.157.112:8087/rd 时,就会负载均衡访问:124.70.157.112:8088; 124.71.112.168:80;这两个server

www.rd.com是自定义的变量值

如果location位置是/rd,则进行负载均衡访问时,与访问当前server是一样的规则,nginx会去访问负载均衡server(如果也是nginx代理的server)的对应端口的根路径的/rd路径,来作为对应服务器根路径访问,所以location后面应该尽量使用通配符/

	upstream www.rd.com {
		server 124.70.157.112:8088;
		server 124.71.112.168:80;
	}
	
	server{
        client_max_body_size 10M;
        listen        8087;
        server_name   124.70.157.112;
        location /rd {
            proxy_pass http://www.rd.com;
       }
    }

2.2 负载均衡四种策略

nginx默认是轮询策略。

权重策略:

将每个请求按照指定的比例,发送到不同的服务器上,weight值越大,访问的比例就越大。用户后端服务器性能不均匀的情况进行使用。

此时表示:8081访问三次、8082访问一次

最少连接数:

哪个服务器的连接数最少,就把请求发送给谁,谁不忙就给谁处理,只需要在upstream中添加least_conn;即可

以上三种策略,当同一个客户端发起多次请求时,nginx负载均衡可能会将该用户的请求分发到不同的服务器中,从而导致与服务端连接的session丢失问题。

IP hash计算

用户访问nginx,会通过用户的IP值计算hash值,通过对集群服务器的取模,决定访问哪台服务器。这样就保证了相同用户在访问时,不会访问到不同的服务器。

劣势就是,如果大量用户的hash计算出来后都大量指向了同一个服务器,就会导致该服务器的压力过大

2.3 nginx负载均衡的其他配置

nginx的备份服务器backup

作为更新时的备份服务器。其他服务器正常运行时,用户请求不会进入到备份服务器。只有当所有的服务器都宕机后,用户请求才会进入到备份服务器。

并且在更新迭代时,可以借助备份服务器完成更新,先将备份服务器更新后,然后停掉其他的服务器进行更新,完成后再启动, 实现无缝不停机更新服务。用户感受不到更新的中断

3. nginx的静态代理

静态资源有Tomcat等应用移交给nginx进行处理。存放在nginx中进行访问。提高效率

当大量的请求进行访问时,就可以都去nginx访问静态文件了,例如图片、音频、视频等信息

4. 动静分离

5. 虚拟主机

一台服务器IP可以绑定多个域名,实现一台服务器作为多台虚拟主机使用的功能

即:多个域名,通过nginx访问的是同一个服务器

 以下配置:

用户访问wht123.com时,请求了nginx代理服务器。

	upstream api {
		ip_hash;
		server 124.71.112.168:8083;
		server 124.71.112.112:8083;
		server 124.71.112.134:8083 backup;
	}
	
	server{
        client_max_body_size 10M;
        listen        80;
        server_name   wht123.com;
		location / {
			root /opt/wht;
			index index.html;
		}
        location /api {
            proxy_pass http://api;
       }
    }

 

四. nginx的限流

参考我的博客:https://blog.csdn.net/qq_41908550/article/details/109469333

五. nginx的升级使用openresty

openresty是国人基于nginx开发一款高性能web server。它是对nginx的封装,本质上还是nginx。

但是nginx是基于C语言开发的,想要基于nginx二次开发实现一些功能十分的困难,openresty就是封装了nginx,可以让开发者自动以nginx,例如,可以将缓存存放在nginx中

但是为nginx提供了高性能的可扩展程序。能够使nginx的并发抗压能力得到了很大的提升。能够达到1W-100W的并发压力。并且能够支持lua脚本

因为本质上还是nginx,所以还是通过nginx的配置文件进行配置

详细介绍可以参考博客:https://blog.csdn.net/albg_boy/article/details/83414828

本实例,将模拟一个二级缓存实现热点数据查询的并发demo。 让并发性能达到极限

先查询nginx缓存,没有再查Redis缓存,没有再查MySQL。二级缓存。

MySQL查到后存入Redis,Redis查到后,存入nginx。

1. openresty的安装

安装非常简单,只需要下载项目、相关依赖。配置仓库亦可完成。安装好openresty后,会自动安装nginx。无需再次安装。

①添加仓库:

yum install yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

②安装openresty:

yum install openresty

③启动测试:

安装完成后,会在/usr/local/openresty路径下有个nginx文件夹,在改文件中启动nginx

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

访问IP进入openresty的欢迎页面,表示安装成功!

2. lua语言安装

①下载lua安装包:curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz

②解压:tar -zxvf lua-5.3.5.tar.gz

③安装lua依赖:yum install libtermcap-devel ncurses-devel libevent-devel readline-devel

④编译安装: 

cd lua-5.3.5

make linux test

⑤测试

3. 实现demo

要实现上述功能,分为以下几步

  1. 第一次查询,nginx数据为空,查找Redis,Redis也为空,最后通过MySQL获取数据,并存入Redis缓存(通过lua脚本)
  2. 第二次查询,nginx缓存为空,查找Redis,并将数据存入nginx缓存
  3. 第三次查询,nginx缓存存在,直接返回

①首先,有一个商品表,作为需要查询的热点商品信息。goods:

②其次,配置nginx的转发,当请求/goods/info?id=1 时,就进行拦截处理,并在NGINX中声明缓存模块,开启缓存。

③编写lua脚本test.lua

这个lua脚本就实现了,二级缓存

以下图片来自网络(如有侵权,请联系作者删除

④修改nginx配置,将访问请求转发给lua脚本实现:

 

④访问测试

访问/goods/info?id2后,Redis中存入了该商品信息,再次访问,nginx中也缓存了该信息

但是注意,要合理设置缓存的过期时间

 

六. NGINX搭建集群

NGINX搭建集群可以通过keepalived实现集群的搭建,具体请参考博客:

https://blog.csdn.net/l1028386804/article/details/72801492

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值