Nginx的诞生
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,非常受中国很多互联网公司青睐。
Nginx的常用功能
作为web服务器最常用的功能之一,尤其是反向代理。Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。
Nginx常用的四大版本
常用版本分为四大阵营
- Nginx开源版(二次开发难度大)
- http://nginx.org/
- Nginx plus 商业版(全家桶)
- https://www.nginx.com
- Openresty
- http://openresty.org
- Tengine(C语言形式的开发,模块化)
- http://tengine.taobao.org/
安装Nginx开源版本
使用的版本nginx-1.21.6.tar.gz
下载地址:http://nginx.org/download/
下载完成之后上传到linux服务器并解压,之后进入解压的文件夹结构如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VGtbcEjP-1654183436964)(https://gitee.com/shuo-Codinghan/pic/raw/master/20220411220303.png)]
安装nginx需要的依赖
首先使用命令
./configure --prefix=你想要安装的目录结构
如果提示了错误信息就先安装依赖
yum install -y gcc
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
之后在使用如下命令
./configure --prefix=你想要安装的目录结构
成功之后使用make命令刷新
make
make install
之后进入到你安装的nginx目录下面结构如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sGamgRL9-1654183436965)(https://gitee.com/shuo-Codinghan/pic/raw/master/20220411221827.png)]
启动nginx
进入sbin目录下
使用如下命令启动服务
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 优雅关闭,在退出钱王城已经基尔兽的连接请求
./nginx -s reload 重新加载配置
ps -ef|grep nginx 查看nginx是否启动
检查是否启动成功
打开浏览器输入服务器的IP
如果无法访问可能是防火墙的问题,使用关闭防火墙命令
systemctl stop firewalld.service 关闭防火墙
systemctl disable firewalld.service 禁止防火墙开机自动启动
firewall-cmd --zone=public --add-port=8080/tcp --permanent 开启8080端口
systemctl restart firewalld.service//重启防火墙
firewall-cmd --reload//重新载入配置
firewall-cmd --list-ports//查看开放端口
如果想要配置脚本可以去百度搜一下nginx配置启动脚本
认识nginx目录结构
主要的目录如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvCYY9lZ-1654183436965)(https://gitee.com/shuo-Codinghan/pic/raw/master/20220411223542.png)]
conf是核心的配置文件主要是nginx.conf文件
html主要放静态页面
logs主要是记录日志
sbin是启动nginx的服务的文件夹
Nginx基础配置(重点,快速认识)
在nginx的默认配置文件在/conf/nginx.conf
- worker_processes:工作的进程个数–对应cpu的物理内核数进行配置,一个内核对应一个(通常)
- worker_connections:每个进行可以创建多少的连接(推荐1024)
- include :开发中可以每个人配置多个配置文件,使用这个可以把每个人的配置文件引入到主配置文件中,mime:types;是一个请求头,服务器端访问的是什么文件
- default_type:默认类型,如果mime:types;中没有配置的时候,默认走的这个类型
- sendfile:指的是数据零拷贝(免除了复制粘贴的内容,直接下载)
- keepalive_timeout:保持连接超时的时间(保持长连接,反向代理讲解)
- listen:监听的端口号,一个server代表一个虚拟主机,每一个主机之间互相不干扰
- server_name:主机名,可以配置域名或者主机名
- location:域名后面跟的路径url(后面主要讲)
- root html:请求接进来之后走那个目录
- index :默认展示页面
- error_page:发生服务器错误的时候,会返回这些配置页面
- error_page中的location root:如果错误会直接去html文件夹中找页面并展示
以上就是配置文件的基本解读,没有太深的理解没有关系,后面我们会进行实战的操作,再做一一的解读
Nginx配置虚拟主机
server {
listen 9001;
server_name 114.55.142.184;
114.55.142.184 / {
root /home/data/index.html;
index index.html index.htm;
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
与server同级复制上面的内容,listen:监听的端口,root:你要访问的根目录,只需要区分端口号就可以
重启nginx
systemctl reload nginx
ServerName的匹配规则
顺序匹配,如果前面的server匹配上了,后面的就不再进行匹配
也可以配置多个name如下
server_name name1 name2;
通配符,*是都可以匹配
server_name *.conm
通配符的结束匹配
server_name www.xxx.*;
也可以使用正则匹配
server_name ~^[0-9]+\.xxxx\.com$;
反向代理
什么是反向代理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AyjJHJad-1654183436966)(https://gitee.com/shuo-Codinghan/pic/raw/master/20220412215427.png)]
- 用户访问网关,网关将请求发送到nginx,再发送到后台
- 用户不可以直接访问服务器
正向代理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GVkJauCU-1654183436966)(https://gitee.com/shuo-Codinghan/pic/raw/master/20220412215617.png)]
- 由我们自己主动配置代理服务器去访问外网是正向代理
负载均衡
- nginx代理了很多太服务器,突然后一台服务器不可用,nginx可以将请求转移到另一台服务器集群,称之为故障转移,每一次请求都能到达每一台服务器上,也是一种算法->轮询算法,还有一种机制是retry,重试机制(如果一个请求发送完成,但是发现不可行,会进行重新请求)
Nginx配置反向代理
- 在location块下面使用proxy_pass
- proxy_pass http://www.hanshuo.com;这样配置就会被代理到这里,如果配置了proxy_pass就不需要配置root
- proxy_pass 不支持https
Nginx配置负载均衡
在配置负载均衡的时候我们先来学习一下别名
在server同级使用upstream可以来给要代理的服务器定义别名
upstream 别名{
server ip:端口;
server ip:端口;
}
server{
listen 80;
server_name location;
location /{
proxy_pass http://别名
}
}
如上我们的负载均衡就配置完成了
负载均衡的策略
轮询策略
轮询策略无法保持会话
因为访问的服务器是轮询的,当用户去访问了一台服务器之后,这台服务器会保存session,如果有一台服务器用户没有访问过,这台服务器是没有用户的session的所以不能保持会话
权重(weight)
通过权重去分配访问的次数
upstream 别名{
server ip:端口 weight=1 down;(如果加上了down就不再参与负载均很)
server ip:端口 weight=2 backup;(backup备用机器,正常是不访问的,其他的都不能用的时候会用这个)
}
server{
listen 80;
server_name location;
location /{
proxy_pass http://别名
}
}
上面的down等关键字我们是不经常用的,有的时候会来不及,所以我们会使用动态的;
iphash策略
他会判断ip的来源地址,相同的ip会让他访问上一次访问过的后台服务器
least_conn策略
最少连接访问,保证后端服务器更加均衡
fair策略(第三方插件)
根据后端服务器响应时间转发请求会造成流量倾斜
urlhash策略(插件)
定向流量转发,哈希值不会保持一直,不能解决会话问题
解决策略(无状态的会话保持)
用一个服务器存储session,使用tocken,来进行校验
其他功能不经常使用所以本文章不做介绍,可以自行去网站进行观看
动静分离 https://baijiahao.baidu.com/s?id=1711141108255052096&wfr=spider&for=pc
防盗链 https://www.jb51.net/article/161872.htm