nginx特点
1、高并发,轻量级的web服务软件
2、稳定性高,系统资源消耗率低
对http的高并发处理能力高,单台物理服务器可以支持30000-50000个并非。
一般来说在工作中,单台的并非一般控制在20000左右。
nginx的功能
1、主要功能就是处理静态页面,文本、图片等等。
2、动态内容处理能力较差,一般是把动态的请求转发到中间件(PHP,Python)转发到后端。
3、正向代理和反向代理
正向代理:通过一个代理地址,访问其他的web页面,客户是知道通过代理服务器访问的目标地址。
反向代理:我们也是通过代理地址访问,但是客户端并不知道流量转发带哪一台后端服务器。流量转发是根据算法把流量转发到后台服务器。(反向代理===负载均衡)
4、支持ssl/tls加密,支持https协议
5、支持虚拟主机,在一个nginx的配置当中,可以做多个域名。
6、nginx自带缓存机制,但只能缓存静态文件。
7、自带日志记录,但是nginx没有日志分割功能。记录的是nginx自己的业务日志,如果是程序启动、停止或者程序出错的日志包含在内。
同步和异步
同步:
在互联网中,处理请求的方式,一个服务完成需要其他服务作为依赖时,只有等待被依赖的服务完
整后,才算完成。是一个可靠的序列,要么都成功要么失败。
同步需要服务的状态需要严谨的保持一致。
异步(nginx):
一个服务的完成还是需要依赖其他的服务,只是通知其他依赖服务开始执行,不需要等待依赖服务
的执行结果,被依赖服务执行结果也无法确定。是一个不可靠序列。
nginx快的原因,是因为使用异步的处理方式。
阻塞和非阻塞
阻塞(挂起):在调用结果返回之前,当前的线程会被挂起,一直等到返回结果,在这个期间是不能够执行其他任务。
非阻塞:不需要等待调用的结果,不能立刻得到结果,也不会阻塞当前的线程,而是立刻返回。
nginx的工作方式:异步非阻塞
nginx配置文件
conf:保存所有nginx配置的文件,其中nginx.conf是nginx主核心配置文件,其他的.conf文件主要是nginx的相关功能。
logs:存放nginx日志的目录,access.log记录访问nginx的日志,error记录访问失败的日志(启动失败、配置文件有错)。
sbin:nginx的二进制启动的脚本,一般动用系统控制的命令。
html:保存的是nginx访问的web页面,这个目录可以修改,文件名一般都是index.html
nginx基础命令
nginx -t:检测我们配置文件语法是否正确
nginx -v:显示nginx版本
nginx -s stop / strat / restart / reload:信号,传递一个信号内核处理
nginx主配置文件详解
主配置文件:/usr/local/nginx/conf/nginx.conf
全局模块:对全局生效
events:配置nginx服务器的并非处理数
http————server————location
http:配置代理,缓存,日志以及第三方模块(自定义对http请求进行处理)
server:配置虚拟主机的参数,一个http里面可以有多个server
location:用来匹配uri(一个网站的分网页),一个server里面可以匹配多个location
- nginx处理文件的能力,即同时处理总的并发数=内核数(worker_processes)*子进程处理并发数(worker_connections )
系统限制文件配额的配置文件
如果想要修改worker_connections,超过1024,就要修改系统限制文件配额的配置文件。
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
location匹配的语法root和alias
root:拼接,工作路径和uri合并
location匹配的是 /mnt/www/html/test/index.html文件
如果我们在index.html文件里echo 123,则网页显示的内容就是123。
- 如果没有test这个目录,会报404错误,表示uri匹配不到test这个目录。
- 如果没有index.html(能够被识别的)这个文件,会报403错误,表示没有可供访问的文件。
alias:绝对路径,工作路径必须要包含匹配的uri
补充:403错误的情况
1、没有可供访问的文件;2、主机的IP被别人beny掉了;3、真的没有权限。
统计nginx的访问状态
如我们添加一个location来统计nginx的访问状态次数,具体操作如下,这时候我们访问nginx的时候,会统计我们的访问状态。
Active connections: 1 # 表示当前活动的连接数
server accepts handled requests:表示已经处理的连接信息包含以下三个数字
3 3 3
已经处理的连接数 成功tcp握手的次数 已经处理的请求数
Reading: 0 :表示服务器正从客户端的请求中读取数据
Writing: 1:服务器正在讲响应数据发送给客户端
Waiting: 0 :表示有连接处于空闲状态,可以处理新的请求
基于授权的访问控制
1、基于账号授权的访问控制
首先安装软件:apt -y install apache2
用htpasswd给/nginx/目录下,创建一个以.db结尾的加密文件,并添加自己主机的账户,添加好访
问nginx页面的登录密码。把这个文件权限所有者改成nginx,并赋予400权限,表示只有所有者才
能读。
修改nginx主配置文件,如下
重启服务后,我们访问nginx会发现需要输入账号和密码了
2、基于IP授权的访问控制
当然如果想要禁止某个主机访问我们的nginx,可以在配置文件中deny掉他的ip地址,操作如下:
这时候我们用192.168.254.15主机访问本机的nginx,会报403错误。
注意:以上对哪个location操作,就对哪个uri生效,对location / 操作就对它生效,对location
/status无效。
基于域名的虚拟主机
nginx域名配置
首先配置nginx主配置文件,定义他的域名,如定义成www.zw114.com,保存退出后,重启nginx
服务。
charset utf-8:表示网页支持中文显示
接着我们去系统域名配置文件 /etc/hosts 下添加我们主机IP和域名的映射关系。
这时候我们访问www.zw114.com就等于访问本机的nginx
如果我们想让别的主机也能访问域名就能访问到我们的IP,只要在各自主机上配置域名配置文件
/etc/hosts下添加主机IP和域名的映射关系即可。
独立日志文件
根据上面的操作,我们独立出www.zw114.com的nginx日志文件。
首先我们修改nginx主配置文件,添加zw114.com的进程日志文件,重启服务。
这时候,我们发现logs/目录下,已经生产了zw114.com的独立日志文件。
nginx多个域名配置
首先还是老样子配置nginx主配置文件,添加新的server,定义新的域名,如定义成
www.zw115.com,保存退出后,重启nginx服务。
接着我们还是去系统域名配置文件 /etc/hosts 下添加我们主机IP和域名115的映射关系。
这样我们访问zw115.com,就会访问 /mnt/www/html/test/index.html文件,当然我们已经echo
这里是zw115 > index.html。
生产相应的zw115.com.access.log日志文件。
基于IP地址和端口的域名
根据上面的操作,我们在监听端口这,分别对两个server进行修改IP地址和服务端口,并添加一个
虚拟网卡ens33:1 192.168.254.100/24,并重启nginx服务,具体操作如下:
接着还是去系统域名配置文件 /etc/hosts,添加相应的映射关系。
最后我们访问各自的IP地址,显示成功。