[Nginx]:基于Nginx的中间件架构一

一、nginx特性

1、IO

2、轻量级

3、CPU亲和(affinity)

cpu亲和:是一种把CPU核心和nginx工作进程绑定方式,把每个worker进程固定在一个cpu上执行,减少切换的cachemiss,获得良好的性能。

4、sendfile

处理静态文件效率很高,因为他的传输机制是:sendfile。

对比之前httpserver的传输文件。httpserver传输机制

《[Nginx]:基于Nginx的中间件架构一》 sendfile.png

文件–》操作系统内核空间–>用户空间–》socket;响应给用户。 发生多次切换

文件 其实不需要经过用户空间(处理逻辑),直接就可以通过内核空间传输。sendfile就是只通过内核空间 进行传输。

二、nginx快速搭建

参考官方文档介绍

三、nginx的目录和配置语法

基础参数使用

省略

四、Http请求

《[Nginx]:基于Nginx的中间件架构一》 http请求.png

请求报文:

request- 包括请求行、请求头部、请求数据

response-包括状态行、消息报头、响应正文

下面来查询一下一次请求的内容信息。curl -v http://www.imooc.com

[root@localhost conf]# curl -v http://www.imooc.com    
* About to connect() to www.imooc.com port 80 (#0)
*   Trying 117.121.101.40...
* Connected to www.imooc.com (117.121.101.40) port 80 (#0)
> GET / HTTP/1.1                //... >发起request请求  请求方式,请求协议
> User-Agent: curl/7.29.0       //... request请求的head内容
> Host: www.imooc.com
> Accept: */*
>                               //... < response  服务端响应的内容
< HTTP/1.1 301 Moved Permanently        //  301  响应的状态
< Server: nginx
< Date: Mon, 14 May 2018 08:38:35 GMT
< Content-Type: text/html
< Content-Length: 178
< Connection: keep-alive
< Location: https://www.imooc.com
< 
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host www.imooc.com left intact
五、nginx日志类型

暂且省略,参考官网

六、nginx模块讲解

1. nginx官方模块
http_stub_status_module
random_index_module
Syntax:random_index on | off;
Default:random_index off;
Context:location
http_sub_module :http内容替换 (有多个语法)
Syntax:sub_filter string replacement;
Default:-
Context:http,server,location
2.第三方模块

七、nginx的请求限制

连接频率限制 : limit_conn_module

请求频率限制 : limit_req_module

1.1连接与请求的原理

《[Nginx]:基于Nginx的中间件架构一》 http协议的连接与请求.png

建立在TCP协议之上。 TCP三次请求之后,才能进行http之间连接请求。最后在通过客户端与服务端之间第三方包来回传输。

《[Nginx]:基于Nginx的中间件架构一》 http协议版本.png

HTTP请求建立在一次TCP连接基础上

一次TCP请求至少产生一次HTTP请求,当然可以产生多次HTTP请求

1.2 nginx对http请求连接的限制语法
Syntax:limit_conn_zone key zone=name:size;
Default:-
Context:http
Syntax:limit_conn_zone number;
Default:-
Context:http,server,location
1.3请求限制
Syntax:limit_req_zone key zone=name:size rate=rate;
Default:-
Context:http
Syntax:limit_req zone=name [burst=number][nodelay];
Default:-
Context:http,server,location

八、nginx的访问控制

1、实现访问控制的基本方式

​ 基于IP的访问控制 http_access_module

​ 基于用户的信任登录 http_auth_basic_module

2、http_access_module

    Syntax:allow address|CIDR|unix:|all;
    Default:-
    Context:http,server,location,limit_except
    Syntax:deny address|CIDR|unix:|all;
    Default:-
    Context:http,server,location,limit_except

http_access_module 配置

http_access_module 局限性

​ 只能通过remote_addr来信任。

优化

3、http_x_forwarded_for

记录过程和ip地址

《[Nginx]:基于Nginx的中间件架构一》 http_x_forwarder_for.png

http_x_forwarded_for=ClientIP,Proxy(1)IP,Proxy(2)IP… …

4、http_access_module局限性

方法一、采用别的HTTP信息控制访问,如:HTTP_X_FORWARD_FOR

方法二、结合geo模块作(后面详细记录)

方法三、通过HTTP自定义变量传递

后续待更新,整理!
    原文作者:瑾兰
    原文地址: https://www.jianshu.com/p/f9420ca965bc
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞