美文网首页
Nginx 基本入门1

Nginx 基本入门1

作者: DayDayUpppppp | 来源:发表于2017-09-22 16:11 被阅读0次
    • 什么是Nginx
      Nginx是一个高性能的http服务器和反向代理服务器。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核 Poll 模型,能经受高负载的考验。

    • Nginx的架构
      Nginx 在启动后以daemon 的方式在后台运行,采用master + worker 的方式工作。master 的任务是接收外界的信号,管理worker结点;worker的作用是处理http请求。

    • nginx处理一个请求的流程
      todo

    nginx对于使用者来说,最重要的是熟悉它的配置文件。下面是一个nginx的一个标准配置文件nginx.conf, 我的想法是把配置文件里面的每一行的作用分析一下,这样可以了解nginx 的基本功能。然后,配置一个nginx静态服务器,作为练手。

    image.png
    • 配置文件中每一行代码功能的分析

      # line1 :
      worker_processes 8 
      

      第一行,worker_porcesses 8,表示的是nginx启动之后,会创建8个worker结点来干活。

      nginx 的架构是master-worker 的结构,master进程来管理多个worker进程。

      1. master的作用只是来管理worker进程,启动服务,停止服务,重启加载配置文件。
      2. worker结点的作用是用来干活的,是来处理http请求的。(刚刚开始看的时候,理解错误了,worker结点是用来处理http请求的,但是并不是每遇到一个http的请求就创建一个worker来处理。worker只会创建有限的个数)
      3. 对于worker的个数,官方给出的建议是等于cpu核心的个数。nginx的想法并不是通过创建无限多的进程,来提高处理并发请求的能力。ngxin是尽可能的以异步的方式去处理请求。对于worker进程,它的想法是尽可能的减少进程切换的开销,所以进程数等于cpu核心数是最好的状态。(这个又看到一个风骚的操作,就是worker进程去绑定特定的cpu核心,切换环境的开销还可以再高效一点)
      #line2~line3
      error_log  logs/error.log;
      pid        logs/nginx.pid;
      

      第二行到第三行,这个就是指定错误日志的输出位置和进程的pid,这两个文件都存在与logs的文件夹下面。

      #line4~line7:
      events {
          worker_connections  1024;
      }
      

      这里遇到了第一个块配置项events,worker_connnects 1024 ;表示的nginx 的默认的并发数目。
      那么,一个nginx的最大连接数 = worker_processes * worker_connections
      PS :

    • 这里不是很确定,不知道worker_processes * worker_connections
      计算出来的是最大连接数,还是最大并发数? 让我再想想

    • 这个worker_connnects 1024 是配置文件给的,实际在我的电脑上能不能做到,我接下来用apache ab 压力测试一下。结果以后补充

    #line 8 ~line14
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        #tcp_nopush     on;
        keepalive_timeout  65;
        #gzip  on;
        ...
        ...
    

    include 表示嵌入将其他的配置文件嵌入到当前的配置文件里面。

    关于mime.types ,我的理解是:
    HTTP request里面有一个头叫 Accept,列出浏览器可以接受的mime type,HTTP response 的Content-Type 的值 在Accept 里面。我的理解是Nginx 会根据请求的文件的扩展名来决定返回什么 Content-Type。

    如果Web程序没设置,Nginx也没找到对应文件的扩展名的话,就使用默认的Type,这个在Nginx 里用 default_type定义,比如 default_type application/octet-stream; 。

    关于sendfile on
    这是nginx 的文件操作的优化配置之一,这个是启用linux上的sendfile系统调用来发送文件,这样就减少了内核态和用户态的切换,减少了两次内存的复制。文件从磁盘里面读取之后直接在内核态里面写入网卡设备,提高了发送文件的效率。

    关于nginx文件操作的优化,还有aio,directio,还有文件缓存机制open_file_cache_max等

    keepalive_timeout 65;
    http请求里面的keepalive 功能是为了让多个请求复用一个http长连接,这个功能可以提高服务器的性能。 keepalive_timeout 表示了一个长连接闲置超过65秒的时候,服务器就会关闭这个链接。

    gzip on;
    表示启用压缩

    #line 17 ~31
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    

    每一个server块表示的是一个虚拟主机
    listen 80 表示的是在监听的端口是80,server_name 表示的是虚拟主机的名字

    line19 ~ line22
    location /test {
          root  html;   #这个root也可以不写,因为默认的root就是html
    }
    

    假设nginx 的服务器的路径是:


    image.png

    location的作用是,会尝试根据用户的请求中的URI来匹配上面的/URI的表达式,如果可以匹配,就选择location的规则来处理用户的请求。所以,location的作用就是,选择location里面的配置来处理用户的请求。

    对于这样的一个location ,对于请求是 127.0.0.1/test/my.html , nginx收到这个请求之后,处理的流程是:

    1. location 找到test
    2. 在root的路径对应的html文件夹下面找到test 文件里里面的my.html文件
    • ATTENTION: 注意必须在html的文件夹下面 创建一个名字叫test的文件夹,里面放一个my.html的文件。
      如果我有一个静态文件 myindex.html mycss.css 我想搭建一个静态的站点,那直接放到nginx的html文件夹里面就可以了。

    小结

    小结一下,nginx配置文件的结构图,应该是如下:

    untitled.png

    这篇文章写的是nginx配置文件的分析,这一篇文章写的是关于nginx的基本使用和一些常用的配置。
    https://www.jianshu.com/p/b2817017ddaf

    相关文章

      网友评论

          本文标题:Nginx 基本入门1

          本文链接:https://www.haomeiwen.com/subject/fayfextx.html