nginx网站服务
nginx介绍
1、支持高并发,轻量级的一个web服务软件(web服务器以及反向代理服务器)
2、稳定性高,而且系统的资源消耗率相对较低,比apache低得多(能够处理大量并发连接而不占用过多的系统资源,称为可以处理高流量网站的理想选择)
对http的高并发处理能力高,单台物理服务器可以支持30000-50000个并发
一般来说,在工作中,单台的并发一般在20000左右
nginx的功能介绍
1、主要功能就是处理静态页面,文本,图片等等
2、动态内容处理能力较差,一般是把这种动态的请求转发到中间件(PHP,PYthon),由中间件转发到后端,对后端服务器的健康检查仅支持通过端口进行
什么是代理
3、正向代理和反向代理
正向代理:用代理服务器解析目标地址,通过一个代理的地址,访问其他的web页面,客户端是知道通过代理服务器访问的目标地址
反向代理:也是通过代理地址访问,但是客户端并不知道流量转发到了哪一台后端服务器
流量转发是根据算法把流量转发到后台服务器
反向代理=====负载均衡
4、支持ssl/tls 加密支持 支持http协议
5、支持虚拟主机,在一个nginx的配置当中,可以做多个域名
6、nginx自带缓存机制,可以缓存静态文件
7、自带日志记录,但是nginx没有日志分割功能(所有都放在一个里面),记录的是nginx自己的业务日志,如果是程序启动停止,程序出错的日志不包含在内
同步异步
同步:在互联网中,处理请求的方式,一个服务完成需要其他服务作为依赖时,只有等待被依赖的服务完成后,才算完成,需要整个的一个周期,是一个可靠的序列,要么都成功要么都失败
服务的状态需要严谨的保持一致
异步:不需要等待,下一个继续,一个服务的完成需要依赖其他的服务,只是通知其他依赖服务开始执行,不需要等待依赖服务的执行结果,被依赖的服务执行结果也无法确定,是一个不可靠的序列
nginx快的原因,使用的是异步的处理方式
同步的定义和特点
- 定义:同步是指程序按照顺序执行,每一步的执行结果必须等待上一步完成之后才能进行下一步。
- 特点:
- 需要等待操作的结果返回。
- 执行过程是线性的,一个任务完成后才能开始下一个任务。
- 简单直观,易于理解和实现。
- 在处理耗时任务时可能会导致系统资源的空闲等待,降低效率。
异步的定义和特点
- 定义:异步是指程序的执行不需要等待某个操作的结果返回,而是可以继续执行后续的代码。
- 特点:
- 不需要等待操作的结果返回。
- 执行过程可以是并发的,可以同时处理多个任务。
- 通常涉及回调、事件监听或消息队列等机制。
- 可以提高程序的响应性和并发性,尤其是在涉及大量输入输出操作或网络通信时非常有用。
阻塞和非阻塞
阻塞:在调用结果返回之前,当前的线程会被挂起(挂起的状态被称为阻塞),一直等到返回结果,这个线程才会继续运行,在这个期间是不能够执行其他任务的。
非阻塞:不需要等待调用的结果,如果不能立刻得到结果,也不会阻塞当前的线程,而是立刻返回。
nginx的工作方式:异步非阻塞
定义
- 异步:异步是指程序的执行不需要等待某个操作的结果返回,而是可以继续执行后续的代码。
- 非阻塞:非阻塞是指程序在等待某个操作的结果时,不会被挂起,而是可以继续执行其他任务。
nginx的工作流程
nginx服务开启nginx程序,nginx程序会分出主进程和子进程,子进程的数量主要由配置文件中的worker_processes指令来决定,主进程读取并且校验配置文件,如果配置文件不出错,就让子进程来接受并且响应客户端的请求,如果修改配置文件,重启(程序)保存之后,主进程会先让子进程处理完正在处理的请求,随后杀死子进程,在重启之后分出新的主进程和子进程。
http://192.168.44.101/index.html,子进程会返回/usr/local/nginx/html/index.html,因为root会设定根目录,默认为/usr/local/nginx/html/index.html。
nginx的目录结构
conf:保存所有nginx配置的文件,其中nginx.conf是主核心配置件,其他的配置文件主要是nginx的相关功能
logs:存放nginx日志的目录 access.log记住访问nginx的日志 error.记录访问的失败
sbin:nginx的二进制启动的脚本,一般动用系统控制命令
nginx -t 检测配置文件的语法是否正确
nginx -v 检测nginx的版本
nginx -s stop start restart reload 信号,传递一个信号让内核处理(也可以对程序进行控制)
html:保存的是nginx访问的web页面,这个目录可以修改,文件名一般是index.html
nginx的配置文件详解
全局模块:对全局生效
events:主要是配置nginx服务器的并发处理数
http :配置代理、缓存、日志以及第三方模块(自定义的对http请求进行处理)
-------- server:配置虚拟主机的参数,一个http里面可以有多个server
---------- location: 用来匹配uri(是一个目录)
一个server里面可以有多个location
location的匹配语法
root 是拼接访问,把路径和uri合并
alias 绝对路径,工作目录必须要包含匹配的uri
sendfile on的过程
直接向网络接口发送一个文件描述符和网络接口信息,让网络接口直接读取相关文件,省去了复制的一个过程。
worker_processes 1; (子进程数量,通常物理处理器的核数对应1到2个子进程)
events {
worker_ connections 1024 (一个子进程对应的连接数,默认是1024)
(linux默认的连接数是1024,需要修改配置文件/etc/security/limits.conf)
nproc 系统能处理的进程数
nofile 系统能打开文件的数量
必须重启才能生效
ulimit -n 临时生效 -a查看只修改了打开文件的数量
}
http {
include(可以引用其他配置文件) mime.types; (请求头告诉客户端发送的什么文件,让主机可以识别,XX/XX(性质和格式))
default_type application/octet-stream;(如果文件的类型不在配置文件里,用这个格式发送给客户端)
sendfile on;赋值零拷贝(免除了拷贝的过程,减少了调度和复制的过程)
keepalive_timeout 65; (数据传输完毕保持连接的时间)
}
server(在Nginx中,多个域名可以共用同一个端口(如80端口),这是因为Nginx使用了虚拟主机的概念。虚拟主机允许在同一个服务器上托管多个域名,并且每个域名可以独立地处理请求?){
}
#主机
server {
listen 80;
server_name localhost;(#配置域名或者主机名)
chartset utf-8(指定页面解码的字符集,utf-8可以使用中文解码)
# http://atgui.com/xxoo/index.html(uri)
location / {
root html;
index index.html index.html;
}
error_page 500 502 503 504 /50x.html;
location =/50x.html(定义错误页面跳转的路径){
root html;
}
}
实验
如何统计nginx的访问状态
基于授权的访问控制
apt -y install apache2
htpasswd -c /usr/local/nginx/passwd.db cwq 设置当前系统用户登陆页面的密码
chown nginx.nginx /usr/local/nginx/passwd.db cwq
chmod 400 /usr/local/nginx/passwd.db 必须是400
auth_basic_user_file /usr/local/nginx/passwd.db;
拒绝指定ip地址的访问
配置虚拟主机的域名
vim nginx.conf
server {
sever_name www.pikaqiu.com
charset utf-8
access_log /usr/local/nginx/logs/xy104.com.access.log
}
systemctl restart nginx
vim /etc/hosts
192.168.213.51 www.pikaqiu.com 非注册域名需要在/etc/hosts文件中进行配置
基于域名
一个ip可以匹配多个域名(一个nginx可以做多个域名映射)
基于IP地址
server {
listen 192.168.213.69:80
server_name www.pikaqiu.com
}
ifconfig ens33:1 192.168.213.69/80
基于端口号
改端口号即可
(一个http里的站点)