一、nginx介绍
1.简介
Nginx是一款高性能的Web服务器、反向代理服务器、负载均衡器和HTTP缓存,由Igor Sysoev开发并于2004年发布。它以其高性能、轻量级和低资源消耗著称,特别适用于处理大量并发连接
2.性能
- 高并发,轻量级的web服务软件
- 稳定性高,系统资源消耗率低。对http的高并发处理能力高,单台物理服务器可以支持3万-5万个并发,一般情况下单台的并发量在2万左右。
3.nginx的功能
(1)主要功能:处理静态页面,文本、图片等。
(2)动态内容处理能力较差,一般是把动态的请求转发到中间件(PHP,PYTHON)转发到后端。
(3)正向代理和反向代理。
正向代理:通过一个代理的地址,访问其他的web页面,客户端是知道通过代理服务器访问的目标地址。
反向代理也是通过代理地址访问,但是客户端并不知道流量转发到了哪一台后端服务器,流量转发是根据算法把流量转发到后台服务器。
反向代理<==>负载均衡
(4)支持ssl/tls加密支持,支持https协议。
(5)支持虚拟主机,在一个nginx的配置当中,可以做多个域名。
(6)nginx自带缓存机制,可以缓存静态文件。
(7)自带日志记录,但是nginx没有日志分割功能。日志记录的是nginx自己的业务日志,如果是程序启动、停止、程序出错的日志不包含在内。
4.nginx的工作方式
异步非阻塞
同步
在互联网中,处理请求的方式,一个服务完成需要其他服务作为依赖时,只有等待被依赖的服务完成后才算完成。是一个可靠的序列,要么都成功,要么都失败。服务的状态需要严谨的保持一致。
异步
一个服务的完成需要依赖其他服务,只是通知其他依赖服务开始执行,不需要等待依赖服务的执行结果,被依赖的服务执行结果也无法确定,是一个不可靠序列。
阻塞
在调用结果返回之前,当前的线程会被挂起,一直等到返回结果,在这个期间是不能执行其他任务的。
非阻塞
不需要等待调用的结果,不能立刻得到结果也不会阻塞当前的线程,而是立刻返回。
二、nginx相关文件
1./usr/local/nginx下
-
conf
保存所有nginx配置的文件,其中的nginx.conf是主配置文件,其他的.conf文件主要是nginx相关功能。
-
logs
存放nginx日志的目录,access.log记录访问nginx的日志, error.log记录访问失败的日志(启动失败的日志,配置文件有错)。
-
sbin
nginx的二进制启动的脚本,一般动用系统控制命令。
-
html
保存的是nginx访问的web页面,这个目录可以修改,文件名一般都是index.html。
2.nginx命令
nignx命令 | 说明 |
nginx -t | 检测配置语法 |
nginx -v | 显示nginx的版本 |
nginx -s stop/start/restart/reload | 传递一个信号让内核处理nginx |
3.nginx.conf主配置文件模块
全局模块
对全局生效。配置运行用户和子进程数量。
events模块
配置nginx服务器的并发处理数
http模块
配置代理,缓存,日志以及第三方模块(自定义对http请求进行处理)。
http模块里面包含server模块,server模块里面包含location模块。
server模块
配置虚拟主机的参数,一个http里面可以有多个server。
location模块
用来匹配URI,一个server里面可以有多个location。
https://www.bilibili.com/v/kichiku/?spm id from=333.1007.0.0
#URI /v/kichiku/
location匹配的语法
root 拼接 路径+URI
alias 绝对路径,工作路径必须要包含匹配URI
mkdir -p /var/www/html/test
echo "今天是Friday!" > /var/www/html/test/index.html
location /test {
root /var/www/html;
index index.html index.htm;}
#匹配的是/var/www/html/test/里面的index.html或者index.htm文件
#如果test不是目录,会报404;如果test目录下找不到html文件会报403
location /test {
alias /var/www/html/test; #如果这里是/var/www/html会报403
index index.html index.htm;}
4.nginx.conf详解
5.修改主配置文件的应用
-
基于授权的访问控制
安装依赖软件
apt -y install apache2
设置用户和密码
htpasswd -c /usr/local/nginx/passwd.db zhang
#生成了一个加密文件,登录用户zhang
chown nginx /usr/local/nginx/passwd.db #修改所有者
chmod 400 /usr/local/nginx/passwd.db #修改权限
修改配置文件
location / {
root html;
index index.html index.htm;
#开启加密认证的模块auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;}
systemctl restart nginx #重启生效
-
访问状态的统计
location /status {
stub_status on;
#打开统计的功能
access_log off;
#作为统计访问的信息不会被记录到日志当中}
Active connections:2 # 表示当前活动的连接数
server accepts handled requests #表示已经处理的连接信息,包含以下三个数字
2 2 20
已经处理的连接数 成功tcp握手的次数 已经处理的请求数
Reading: 0 Writing: 1 Waiting: 1 这些数字表示服务器当前的状态
Reading 0 表示服务器当前没有正在读取的请求
Writing 1 服务器正在将响应数据发送给客户端
Waiting 1 表示有一个等待处理的请求
-
同一ip可以映射到不同的域名
原本的server{}里面的server_name localhost;把localhost修改成www.hello.com
在server{}结束后的下面新增
server {
listen 80;
server_name www.happy.com;
charset utf-8;
access_log logs/happy.com.access.log;
location / {
root /var/www/html/test;
index index.html;
}
}
nginx -t
systemctl restart nginxvim /etc/hosts
192.168.206.60 www.hello.com www.happy.com
-
基于域名的虚拟主机
ifconfig ens33:1 192.168.206.100/24 #创建虚拟ip
修改nginx.conf
第一个server{}里面的listen后面改成 192.168.206.60:80
第二个server{}里面的listen后面改成 192.168.206.100:80
systemctl restart nginx
vim /etc/hosts
192.168.206.60 www.hello.com
192.168.206.100 www.happy.com