目录
一. 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
要实现上述功能,分为以下几步
- 第一次查询,nginx数据为空,查找Redis,Redis也为空,最后通过MySQL获取数据,并存入Redis缓存(通过lua脚本)
- 第二次查询,nginx缓存为空,查找Redis,并将数据存入nginx缓存
- 第三次查询,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