Nginx核心配置详解

Nginx官方帮助文档

http://nginx.org/en/docs/

配置文件说明

Nginx配置文件组成部分:

  • 主配置文件:nginx.conf
  • 子配置文件:include conf.d/*.conf
  • fastcgi, uwsgi,scgi 等协议相关的配置文件
  • mime.types:支持的mime类型,MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。MIME参考文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_Types

Nginx配置文件格式说明:

  • 配置文件由指令与指令块构成
  • 每条指令以;分号结尾,指令与值之间以空格符号分隔
  • 可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
  • 指令块以{ }大括号将多条指令组织在一起,且可以嵌套指令块
  • include语句允许组合多个配置文件以提升可维护性
  • 使用#符号添加注释,提高可读性
  • 使用$符号使用变量
  • 部分指令的参数支持正则表达式

Nginx 主配置文件的配置指令方式:

directive value [value2 …];
  • 指令必须以分号结尾
  • 支持使用配置变量
  • 内建变量:由Nginx模块引入,可直接引用
  • 自定义变量:由用户使用set命令定义,格式: set variable_name value;
  • 引用变量:$variable_name

主配置文件结构:四部分

main block:主配置段,即全局配置段,对http,mail都有效

#事件驱动相关的配置
event {
          ...
}

#http/https 协议相关配置段
http {
          ...
}

#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
          ...
}

#stream 服务器相关配置段
stream {
          ...
} 

默认的nginx.conf配置文件格式说明

查看默认的nginx.conf文件内容,排除空行以及注释行
[root@nginx01 conf]# grep -Ev "#|^$" /apps/nginx/conf/nginx.conf

#全局配置段,所有配置全局生效
#设置nginx启动时用的用户和组
user nginx nginx;
#设置启动的工作进程数量
worker_processes  1;
#还可设置nginx的工作模式,PID路径,日志路径等

#events设置段,事件驱动相关的配置
#主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连
接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的
网络连接进行序列化等。
events {
    #设置单个nginx工作进程可以接受的最大并发,作为web服务器
的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为
(worker_connections * worker_processes)/2
    worker_connections  1024;
}

#http/https 协议相关配置段
#是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模
块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,
server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链
接的请求上限等。
http {
    include       mime.types;
    default_type  application/octet-stream;

    #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用
sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操
作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,硬盘 >>
kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
    sendfile        on;

    #长连接超时时间,单位是秒
    keepalive_timeout  65;

    #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如
本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供
web服务
    server {

        #配置server监听的端口
        listen       80;

        #本server的名称,当访问此名称的时候nginx会调用当前
serevr内部的配置进程匹配。
        server_name  localhost;

        #location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指
令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特
定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的
配置也是在location模块中配置。
        location / {

            #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。
            root   html;

            #默认的页面文件名称
            index  index.html index.htm;

        }

        #错误页面的文件名称
        error_page   500 502 503 504  /50x.html;

        #location处理对应的不同错误码的页面定义到/50x.html,这个
跟对应其server中定义的目录下。
        location = /50x.html {

            #定义默认页面所在的目录
            root   html;
        }
    }
}

全局配置

Main 全局配置段常见的配置指令分类

  • 正常运行必备的配置
  • 优化性能相关的配置
  • 用于调试及定位问题相关的配置
  • 事件驱动相关的配置

全局配置说明

#启动Nginx工作进程的用户和组
user nginx nginx;

#启动Nginx工作进程的数量,一般设为和CPU核心数相同
worker_processes [number | auto];

#将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;

#绑定CPU相关示例,无需配置
CPU MASK: 00000001:0号CPU
          00000010:1号CPU
  10000000:7号CPU
worker_cpu_affinity 0001 0010 0100 1000;第0号---第3号CPU
#示例
worker_processes  2;
worker_cpu_affinity 00000001 00000010
[root@nginx02 ~]# ps axo pid,cmd,psr | grep nginx
  1019 nginx: master process /apps   1
  1610 nginx: worker process         0
  1611 nginx: worker process         1
  1614 grep --color=auto nginx       0

#版本1.9.10后允许将进程自动绑定到cpu核心上
#auto 绑定CPU
worker_processes auto;
worker_cpu_affinity auto;

#可选参数mask用于限制自动绑定可用的cpu数量:
worker_cpu_affinity auto 01010101;

#错误日志记录配置,语法:error_log file [debug | info | notice | warn | error | crit
| alert | emerg]
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log /apps/nginx/logs/error.log error;

#pid文件保存路径
pid       /apps/nginx/run/nginx.pid;

#工作进程优先级,-20~20(19)
worker_priority 0;

#所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例
如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级
别的最大打开文件数的限制.最好与ulimit -n 或者limits.conf的值保持一致
worker_rlimit_nofile 1024;

#前台运行Nginx服务用于测试、或者以容器运行时,需要设为off
daemon off;

#是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为on
master_process off|on; #是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为
on


events {

   #设置单个工作进程的最大并发连接数
   worker_connections  65536;


   #使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置。
   use epoll;


   #on为同一时刻一个请求轮流由worker进程处理,而防止被同时唤醒所有
worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊
群",因此nginx刚安装完以后要进行适当的优化。建议设置为on
   accept_mutex on;


   #on时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认
为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on
   multi_accept on;
}

http配置段

配置结构

http {
    ...
    ...                               #各server的公共配置
    server {                          #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
        ...
        }
    server {
        ...
        server_name                   #虚拟主机名
        root                          #主目录
        alias                         #路径别名
        location [OPERATOR] URL {     #指定URL的特性
        ...
            if CONDITION {
                ...
            }
        }
    }
}

配置说明

http {

    #导入支持的文件类型,是相对于/apps/nginx/conf的目录
    include       mime.types;


    #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
    default_type application/octet-stream;

    #日志配置部分
    #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 logs/access.log main;

    #自定义优化参数
    sendfile       on;


    #在开启了sendfile的情况下,合并请求后统一发送给客户端,必须开启sendfile
    #tcp_nopush     on;

    #在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文。
    #tcp_nodelay   off;
    #keepalive_timeout 0;

    #设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同
    keepalive_timeout  65 65;

    #开启文件压缩
    #gzip on;


    server {


        #设置监听地址和端口
        listen       80;


        #设置server name,可以以空格隔开写多个并支持正则表达式,如:*.magedu.com www.magedu.* ~^www\d+\.magedu\.com$ default_server
        server_name localhost;


        #设置编码格式,默认是俄语格式,建议改为utf-8
        #charset koi8-r;
        #access_log logs/host.access.log main;
        location / {
            root   html;
            index index.html index.htm;
        }
        #error_page 404             /404.html;

        #重定向服务器错误页面到静态页面/50x.html
        #定义错误页面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80

        #以http的方式转发php请求到指定web服务器
        #location ~ \.php$ {
        #   proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #以fastcgi的方式转发php请求到php处理
        #location ~ \.php$ {
        #   root           html;
        #   fastcgi_pass   127.0.0.1:9000;
        #   fastcgi_index index.php;
        #   fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
        #   include       fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one

        #拒绝web形式访问指定文件,如很多的网站都是通过.htaccess文件来改变自己的重定向等功能。
        #location ~ /\.ht {
        #   deny all;
        #}
       location ~ /passwd.html {
           deny all;
       }
   }
    # another virtual host using mix of IP-, name-, and port-based configuration

    #自定义虚拟server
    #server {
    #   listen       8000;
    #   listen       somename:8080;
    #   server_name somename alias another.alias;
    #   location / {
    #       root   html;
            #指定默认网页文件,此指令由ngx_http_index_module模块提供
    #       index index.html index.htm;
    #   }
    #}
    # HTTPS server

    #https服务器配置
    #server {
    #   listen       443 ssl;
    #   server_name localhost;
    #   ssl_certificate     cert.pem;
    #   ssl_certificate_key cert.key;
    #   ssl_session_cache   shared:SSL:1m;
    #   ssl_session_timeout 5m;
    #   ssl_ciphers HIGH:!aNULL:!MD5;
    #   ssl_prefer_server_ciphers on;
    #   location / {
    #       root   html;
    #       index index.html index.htm;
    #   }
    #}

MIME

#在响应报文中将指定的文件扩展名映射至MIME对应的类型
include           /etc/nginx/mime.types;
default_type     application/octet-stream;#除mime.types中的类型外,指定其它文件的默认
MIME类型,浏览器一般会提示下载
types {
   text/html html;
   image/gif gif;
   image/jpeg jpg;
}
#MIME参考文档:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_Types

指定响应报文server首部

#是否在响应报文中的Content-Type显示指定的字符集,默认off不显示
charset charset | off;
#示例
charset utf-8;
#是否在响应报文的Server首部显示nginx版本
server_tokens on | off | build | string;

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享