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;
}
}
原文地址:https://www.cnblogs.com/dcpb/p/14307676.html