Nginx笔记
一、Nginx安装配置及基本操作
1、Nginx安装
环境:Linux
安装命令:yum install nginx
查看是否安装成功:id nginx
关闭防火墙:setenforce 0
getenforce
systemctl disable firewalld
systemctl stop firewalld
2、Nginx基本操作
Nginx启动:nginx
Nginx查看是否启动:ss -tnl
查看Nginx进程:ps -ef | grep nginx
nginx -V:查看Nginx安装位置和支持模块
nginx -t:检查配置文件
nginx -q:让程序处于安静状态,不输出信息除非是错误信息
nginx -s signal:用于传达信号
nginx -p prefix:指定目录位置
nginx -c:指定配置文件
nginx -g:指定指令
1、nginx是用来干什么的?
nginx是异步框架的web服务器,用于处理高并发甚至是海量并发的网络数据
2、nginx怎么配置这些功能?
3、nginx简单配置
cat /etc/nigix/nginx.conf:查看主配置文件
以下为nginx配置文件:
主配置端:
user nginx; #定义nginx使用那种事件驱动类型, worker_processes auto; #用于设置worker进程的数量,auto表示CPU的数量 error_log /var/log/nginx/error.log; #记入错误日志 pid /run/nginx.pid; #用于配置进程编号, include /usr/share/nginx/modules/*.conf; #包含配置文件 events { worker_connections 1024; #worker_connections 可以打开的最大建立的连接数 }
accept_mutex on|off #处理新连接的方法,on是指定worker轮流处理,off则会通知所有worker进程但只有一个worker进程获得处理连接的权限,ps:在高并发时最好使用off
HTTP配置端:
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; server { #server用于配置虚拟主机 listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
4、配置虚拟主机
mkdir /data/nginx/{ip,domain,port} -pv #创建将要使用的目录
cd /etc/nginx/conf.d/ #进入到/etc/nginx/conf.d/目录下
vim ip.conf #创建配置文件
在配置文件中写入:
server { #server用于配置虚拟主机
listen 80 default_server;
root root /data/nginx/ip;
index index.html;
}
vim /data/nginx/ip/index.html #创建HTML文件
nginx -s reload #重启nginx
二、Nginx调优与背后原理
1、Linux网络IO流程
①用户端发送请求,网卡判断是否是需要接受的数据,如果是接受信息
②接受数据后,网卡告诉内存需要接受数据,cpu发送信息准备接受,期间形成一个中断
数据存入内存缓存区
③调用网卡驱动将信息转换成数据报文, 然后放入队列中。
④Linux从队列中读取取数据报文,根据网络层协议查看IP地址是否是本机等等
⑤传输层协议根据数据包中的内容通知相关的应用进行数据读取,应用层执行数据包中的
相关指令
⑥内核缓存区拷贝到应用缓存区
⑦应用读取数据构建响应,通过网络协议进行封装,发回给网卡缓存
⑧网卡调用网卡驱动发送数据
2、Linux网络IO模型
3、TCP/IP协议简介
3.1、tcp三次握手和四次断开
tcp三次握手:
客户端发送请求连接的信息,服务端接受信息后返回请求连接客户端的信息,
客户端接受到服务端发来的信息返回给服务端说接受到了。
四次断开:
客户端断开,服务端接受信息后断开,但请求数据可能没传送完成,在传送完成后断开,
客户端接收完数据后断开与服务端的连接。
3.2、tcp连接溢出
当并发数量过大时,全连接队列满了之后会,服务端会通过net.ipv4.tcp_abort_on_overflow来决定
如何响应,0为丢弃数据包,1为重新走握手的第二步
3.3、洪水攻击时
将net.ipv4.tcp_syncookies调整为1来减少攻击受到的影响,在建立连接的时候服务端会给用户配置
cookies信息,当查看没有cookies信息时会定为攻击的
4、Nginx优化
Nginx 调用Linux本身的sendfile+DNA gather copy系统实现零拷贝方式,整个过程会发生2次上下文切换,0次CPU拷贝和2次DMA拷贝。
location /video/{
sendfile on;
aio on;#一般I/O
}
4、Nginx中location指令
server用来定义域名Host
location用来定义uri的
=:精准匹配
^~:对uri起始字符做字符串匹配(不是正则匹配),区分大小写
~:对uri做(正则匹配),区分大小写;
~*:对uri做(正则匹配),不区分大小写;
优先级:= 大于 ^~ 大于 ~ 等于 ~* 大于 不带符号的
例如:
server{ listen 80; server_name www.a.com a.com; root /data/nginx; location = /img{ return 701; } location ^~ /img{ return 702; } location ~ /img{ return 703; } location ~* /img{ return 704; } }