对Nginx的简单认知

Nginx适用于单体项目,分布式项目能显示出他的强大。

正、反代理

正向代理和反向代理最主要的区别在于 中间代理者是否可以帮我选择要连接哪台服务,这就是nginx的反向代理。

安装Nginx

我的是ubuntu镜像下

apt-get install nginx

安装gcc环境

apt-get install gcc g++
centOs下是:yum install gcc gcc-c++

安装openssl,就是https

sudo apt-get install openssl libssl-dev

安装pcre,用于解析正则表达式

sudo apt-get install libpcre3 libpcre3-dev

安装zlib,压缩和解压缩依赖

sudo apt-get install zlib1g-dev

Nginx里有两个进程

查看Nginx的进程

ps -ef|grep nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8hGXYqVv-1582965860891)(C:\Users\CSea\AppData\Roaming\Typora\typora-user-images\image-20200229140411807.png)]

master进程:主进程

worker进程:工作进程,worker进程的数量可以进行修改(默认1)

在nginx的config配置文件最上方配置一下就可以了

worker_processes: 2;

修改配置文件是需要重启nginx,这样才会生效新的配置文件

master进程就是接收到来自操作人的指令,然后在将这些指令分发给不同的worker,不同的worker对应不同的client。如果当下发重启指令时,有woker进行正在跟client进行响应通讯,那么该worker不会立即重启,会等跟client处理完毕之后再进行重启,空闲的worker就会立即重启。

Nginx处理Web请求机制

Worker抢占机制

当有多个worker的时候,一个client过来请求时,会有一个互斥锁(accept_mutex),这些worker会争抢这把互斥锁,抢到的worker会和这个client进行连接,完成响应。

Nginx事件处理

当只有一个worker时,有一个client1请求过来造成了阻塞,这时候有client2,client3请求过来,这个worker也会同时去处理client2,client3这两个请求,因为nginx本身是异步非阻塞的(AIO),这是对于nginx可以进行设置的,在linux上使用的是epoll事件机制,对于不同的镜像有不同的工作模式。

传统的服务器事件处理就是同步阻塞的机制(BIO),处理效率就非常低下。

具体是可以配置nginx最大连接数(并发数),默认是1024,实际要根据服务器的cpu去进行配置,如果太高了cpu就负载了。

events {
    # 默认是使用epoll
    user epoll;
    # 每个worker运行连接的客户端最大连接数
    worker_connections: 1024;
}

为什么Nginx的并发这么高 总结:

1.他的worker抢占机制

2.他自身就是一个异步非阻塞的

配置文件

文件结构:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j6i8UrD0-1582965860894)(C:\Users\CSea\AppData\Roaming\Typora\typora-user-images\image-20200229151141993.png)]

可以将worker的权限赋为root,在配置文件中如下:

user root;

nginx的日志级别:

debug 、info、notice、warn、error、crit

级别依次提高

nginx中有一个access.log,这是用来记录请求记录的日志,这里面他是有一个格式输出的,client的ip

+时间+请求类型+协议+返回状态等,还包括是什么浏览器,从哪个网站跳转过来的信息。

sendfile默认是打开的,这是一个文件高效传输的,提升文件传输的性能

tcp_nopush当数据包累积到一定大小的时候再发送,提升文件传输的效率

sendfile on;
tcp_nopush on;

keepalive_timeout单位是s,保持打开状态的时间,这样server可以用这段时间去处理一些事情,就并不用再去建立一个新的连接去消耗资源(默认0)。

keepalive_timeout 0;

gzip 压缩,默认打开,可以减少带宽,但是CPU会消耗

gzip on;
gzip_min_length 1;  #限制最小压缩,小于1字节文件不会压缩
gzip_comp_level 3; #压缩比范围 1-9,文件越大压缩越多,CPU使用越多
gzip_types:  text/plain application/javascript image/jpeg;#定义压缩文件类型

server 就是配置虚拟主机的内容,就是监听服务器上的某个端口,某个文件映射成自己配置的一个地址

Nginx部署javaWeb项目

server{
        listen 80;
        server_name XXX;

        location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:port;
        }
}

除了在config里配置,还可以利用include来配置

在nginx的配置文件里写上下面的这一句配置(效果其实就是代替了上面的server{})

include cxqnb.conf;

cxqnb.conf里就是把这个server{}配置抽离了出来

server{
        listen 80;
        server_name XXX;

        location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:port;
        }
}

常用命令

nginx -s reload  #重启nginx

sudo systemctl start nginx #启动Nginx

sudo systemctl enable nginx  #开机自动启动Nginx服务

sudo systemctl disable nginx  #关闭开机自动启动Nginx服务

sudo nginx -t   #测试Nginx是否启动成功,这个也是可以查看每次修改完配置是否正确

Nginx配置静态资源

比如:

同一个程序下配置一套静态资源就是增加一个location,location后的路由不能配置相同,localtion后的 内容是会拼接到root后面的地址,比如 /image 就是会匹配 /home/image这个地址

还有一个方式就是使用别名(alias),alias后面配置就是图片的路径,这样访问的时候就是直接用/static访问资源了

server{
        listen 80;
        server_name XXX;

        location / {
        	root /home/food;
        	index index.html;
        }
        location /image {
        	root /home;
        }
        location /static {
        	alias /home/image;
        }
}

location的匹配

location 后面加了 = 就是精准匹配,比如location = /image/logo.png,这样就只能在浏览器里访问这种图片,如果改成其他的名字就会访问不到

server{
        listen 80;
        server_name XXX;

        location / {
        	root /home/food;
        	index index.html;
        }
        location = /image/logo.png {
        	root /home;
        }
}

正则表达式**~** , *****表示不区分大小写,下面的这个例子就是他会去/home下一层层去找这些符合后缀的图片,如果去掉*就是精准查找

server{
        listen 80;
        server_name XXX;

        location ~*\.(GIF|PNG|JPEG) {
        	root /home;
        }
}

**^~**表示以某个字符路径开头请求

server{
        listen 80;
        server_name XXX;

        location ^~/image {
        	root /home;
        }
}

记录:

Nginx执行任务,日志分割(开启定时任务)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值