• Nginx配置详细解析(全)


    一、nginx.conf文件结构

    (1)共三部分:由全局块、events块、http块组成。http块又包含http全局块、server块;server块由多个location块组成。

    (2)一般情况下,高一级块中的指令可以作用于自身所在块和此块包含的所有低级块。

    (3)如果某个指令在两个不同层级的块中同时出现,则以较低层块中的配置为准。

    1.全局块

    (1)从开始到events块之间的一部分内容。

    (2)主要配置影响nginx服务器整体运行的配置指令;作用域时nginx服务器全局。

    (3)可配置:nginx服务器的用户和组、允许生成的worker process数、nginx进程pid存放路径、日志的存放路径、类型以及配置文件引入等。

    2.events块

    (1)主要影响nginx服务器与用户的网络连接。

    (2)可配置:是否开启对worker process下的网络连接进行序列化、是否允许同时接收多个网络连接、选取哪种事件驱动模型处理连接亲求、每个worker process可以同时支持的最大连接数。

    3.http块

    (1)包含http全局块、server块、server块中包含location块。

    (2)http全局块可配置:文件引入、MIME-Type定义、日志自定义、是否启用sendfile传输文件、连接超时时间、单连接请求数上限等。

    4.server块

    (1)server块和虚拟主机有密切联系。

    (2)虚拟主机,又称虚拟服务器、主机空间、网页空间,它是一种技术。

    (3)虚拟主机技术主要应用于HTTP、FTP及EMAIL等多项服务,将一台服务器的某项或全部服务内容 逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源。

    (4)从用户角度看,一台虚拟主机和一台独立的硬件主机是完全一样的。

    (5)虚拟主机技术使nginx服务器可以在同一台服务器上只运行一组nginx进程,就可以运行多个网站。

    (6)server全局块可配置:本虚拟主机的监听配置和本虚拟主机的名称或 IP(域名)配置。

    5.location块

    (1)严格意义上讲,location块是server块的一个指令。

    (2)主要作用是,基于nginx服务器接收到的请求字符串,对虚拟主机名称(域名)之外的字符串进行匹配,对特定的请求进行处理。

    (3)可配置:地址定向、数据缓存、应答控制、第三方模块配置等。

    二、具体配置

    1.配置运行nginx服务器的用户和组

    user user group;
    #user指定可运行用户
    #group 指定可运行用户组
    #只有被设置的用户或用户组成员才有权限启动nginx进程
    #配置在全局块

    2.配置允许生成的worker process数

    worker_processes number | auto ;
    #number 为指定nginx进程最多可以产生的worker process进程数
    #auto,设置此值时,nginx进程将自动检测
    #配置在全局快

     3.配置nginx进程pid存放路径

    pid     /usr/local/nginx/logs/nginx.pid;
    #默认路径
    #也可放置在/usr/local/nginx/sbin目录下命名为web_nginx
    #pid     sbin/web_nginx

    4.配置错误日志的存放路径

    (1)全局块、http块、server块都可以对nginx服务器日志进行相关配置。

    (2)使用需要在编译时使用--with-debug开启debug开关

    (3)错误日志级别,由低到高分为:debug | info | notice | warn | error | crit | alert | emerg ;级别越低出现的次数越高;

    error_logs/error.log error;
    #指定的文件对于运行nginx进程的用户具有写权限;
    #也可使用绝对路径:error_log    /usr/locar/nginx/logs/error.log info;
    #可在全局快、http块、server块、location块中配置;

    5.配置文件的引入

    (1)将其他的nginx配置或第三方模块的配置引用到当前的主配置文件中。

    (2)nginx提供include指令来完成配置文件的引入。

    include file#file 是要引入的配置文件,它支持相对路径
    #新引入进的文件,需要运行nginx进程的用户对其有写权限
    #此指令可放在配置文件任意地方

    6.设置网络连接的序列化

    (1)nginx配置中包含accept_mutex ,当其设置为开启时,将会对nginx进程接收连接进行序列化,防止多个进程对连接的争抢。

    accept_mutex   on|off ;
    #on 为开启, off 为关闭;默认开启;
    #只能在events块中进行配置

    7.设置是否允许同时接收多个网络连接

    (1)每个nginx服务器的worker_process都有能力接收多个新到达的网络连接。

    (2)指令为multi_accept 

    multi_accept  on | off ;
    #默认关闭,即每个worker process一次只能接收一个新到达的网络连接
    #只能在events块中进行配置

    8.配置事件驱动模型

    (1)nginx服务器提供多种事件驱动模型来处理网络消息。

    (2)可以强制指定nginx服务器选择某种事件驱动模型进行消息处理。

    (3)指令为use

    use  method;
    #method可选择的内容有:select、poll、kqueue、epoll、rtsing、/deve/poll、eventport;
    #epoll特点:选择句柄的时候不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要便利整个句柄链表,效率高;
    #select特点:选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应,select就需要遍历所有句柄才能获取到那些句柄有事件通知,效率低;
    #nginx采用epoll模型,apache采用select模型;
    #可以在编译时使用: --with-epoll_module 和 --without-epoll_module设置是否强制编译epoll模块到nginx内核。
    #只能在event块配置。

     9.配置最大连接数

    (1)允许每一个worker process同时开启的最大连接数。

    worker_connections number;
    #number表示所有可能的连接数
    #number值不能大于操作系统支持打开的最大文件句柄数量
    #只能在events块中配置

    10.定义MIME-Type

    (1)区分html、xml、gif、flash等种类繁多的文本媒体资源,需要使用MIME-Type。

    (2)MIME-Type是网络资源的媒体类型。

    (3)nginx服务器作为web服务器,必须能够识别前端请求的资源类型。

    include  mime.types;
    #引用mime_types文件
    default_type  application/octet-stream;
    #配置用于处理前端请求的MIME类型
    #可以在http块、server块、location块中配置

    11.自定义服务日志

    (1)nginx服务器支持服务日志格式、大小、输出等进行配置。

    (2)两个指令:access_log 和 log_format 。

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
    #此命令只能在http块中进行配置
    # $remote_addr 获取客户端IP地址
    # $remote_user 记录客户端用户名称
    # $time_local 获取本地时间
    # $request 记录请求的url和http协议
    # $status 记录返回http请求的状态
    # $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小
    # $bytes_sent 发送给客户端的总字节数
    # $http_referer 记录从哪个页面连接访问过来的
    # $http_user_agent 记录客户端浏览器相关信息
    # $http_x_forwarded_for 记录http请求端真实ip地址,用于多级代理情况
    # $http_x_real_ip 记录访问上级代理服务器的ip地址
    # $connection_requests 当前通过一个连接获得的请求数量;
    # $request_length 请求的长度,包括请求行,请求头和请求正文;
    # $server_name 虚拟主机名称;
    # $msec 日志写入时间
    # $request_time 请求处理时间,单位为秒,精度毫秒,nginx接收用户请求的第一个字节到发完响应数据的时间,包括:接收请求数据时间、程序响应时间、输入、响应数据时间。
    # $upstream_response_time 应用程序响应时间,nginx向后端服务建立连接开始接收完数据后关闭连接为止的总时间。
    access_log logs
    /access.log main;
    # 此命令可在http块、server块、location块中进行配置

    12.配置允许sendfile方式传输文件

    (1)可以实现网页加速

    sendfile  on | off ;
    #开启或关闭,可以在http块、server块、location块配置
    sendfile_max_chunk size;
    #size值如果大于0,nginx进程的每个worker process每次调用sendfile() 传输的数据量最大不能超过这个值;
    #size值为0,则无限制
    #可以在http块、server块、location块配置

    13.配置连接超时时间

    (1)与用户建会话连接后,nginx服务器可以保持这些连接打开一段时间

    keepalive_timeout  65;
    #连接保持时间为65秒
    #可在server块和location块中配置

    14.单连接请求数上限

    (1)用于限制用户通过某一连接向nginx服务器发送请求的次数

    keeplive_requests 100;
    #可在server块和location块中配置;默认设置100

    15.配置网络监听

    listen  *:80  |   *:8000;
    #监听所有80端口和8000端口
    listen  10.0.0.4:8000;
    #监听具体的ip和具体的端口上的连接
    listen  10.0.0.4#监听具体ip的所有端口上的连接
    listen 8000;
    #监听具体端口上的所有ip连接;相当于 listen *:8000;
    listen 10.0.0.4  default_server  backlog=1024;
    #设置10.0.0.4的连接请求默认由此虚拟主机处理;
    #允许最多1024网络连接同时处于挂起状态

    16.配置虚拟主机的名称

    (1)可以使用正则表达式

    (2)可直接配置ip地址

    server_name  www.baidu.com;
    #配置虚拟主机名称,也就是域名
    server_name ~^www.(.+).com$;
    server_name 192.168.1.111;

    17.配置location块

    18.配置补充

  • 相关阅读:
    .net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器
    ASP.NET MVC 伪静态的实现
    关于 redis、memcache、mongoDB 的对比(转载)
    在多台服务器上简单实现Redis的数据主从复制(3)(转载)
    Redis处理文件日志并发(2)
    Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)
    重温WCF之群聊天程序(十)
    重温WCF之会话Session(九)
    select count(*)和select count(1)哪个性能高
    全局压缩http响应头
  • 原文地址:https://www.cnblogs.com/IMSCZ/p/10907613.html
Copyright © 2020-2023  润新知