Nginx 配置文件介绍

本文争对nginx-1.22.0

nginx的核心配置文件是nginx.conf.

1、基本配置

(1)、worker_processes  定义工作进程的数量

最佳值取决于许多因素,包括(但不限于)CPU内核的数量、存储数据的硬盘驱动器的数量以及负载模式。当有人怀疑时,将其设置为可用CPU内核的数量将是一个好的开始(值“auto”将尝试自动检测它)。

 

(2)、error_log  配置日志记录

可以在同一配置级别【debug、info、notice、warn、error、crit、alert或emerg。】上指定多个日志。如果在主配置级别上未明确定义将日志写入文件,则将使用默认文件。

第一个参数定义将存储日志的文件。特殊值stderr选择标准错误文件。可以通过指定“syslog:”前缀来配置对syslog的日志记录。记录到循环内存缓冲区可以通过指定“memory:”前缀和缓冲区大小进行配置,通常用于调试(1.7.11)。

第二个参数决定日志记录的级别,可以是以下参数之一:debug、info、notice、warn、error、crit、alert或emerg。以上日志级别按严重性增加的顺序列出。设置某个日志级别将导致记录指定和更严重日志级别的所有消息。例如,默认级别错误将导致记录错误、crit、alert和emerg消息。注:默认级别error

 

(3)、pid 进程id配置

 

2、events 

提供配置文件上下文,其中指定了影响连接处理的指令。

2.1 、worker_connections  设置work进程(worker_processes)可以同时打开的最大连接数。 正式环境可以放大(65535)

这个数字包括所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接。另一个考虑因素是,同时连接的实际数量不能超过当前打开文件的最大数量限制,该限制可以由worker_rlimit_nofile更改。

总连接数=worker_processes * worker_connections  

2.2 multi_accept 

如果禁用multi_accept,工作进程将一次接受一个新连接。否则,工作进程将一次接受所有新连接。

如果使用kqueue连接处理方法,则忽略该指令,因为它会报告等待接受的新连接数。

2.3  use epoll

设置用于复用客户端线程的轮询方法。具体参考epoll原理

 

3  worker_rlimit_nofile

更改工作进程的最大打开文件数(RLIMIT_NOFILE)限制。用于在不重新启动主进程的情况下增加限制。

 

4、http配置

提供指定HTTP服务器指令的配置文件上下文。

4.1  include       mime.types; 

配置支持的多媒体类型,在conf/mime.types文件下查看支持的类型

 

4.2 default_type 

定义响应的默认MIME类型。可以使用types指令设置文件扩展名到MIME类型的映射。 默认是application/octet-stream; 字节流类型,能兼容绝大多数的资源文件.

 

4.3 log_format

定义日志格式,相关内容查看文档

 

4.4 access_log 访问日志

简单使用方式  access_log  日志路径  使用的日志模板(log_format);

 

4.5 sendfile 高效文件传输模式

在此配置中,使用SF_NODISKIO标志调用sendfile(),这将导致它不会在磁盘I/O上阻塞,而是报告数据不在内存中。然后,nginx通过读取一个字节来启动异步数据加载。在第一次读取时,FreeBSD内核将文件的前128K字节加载到内存中,尽管下一次读取将只加载16K块中的数据。这可以使用read_ahead指令进行更改。 

 

4.6 sendfile_max_chunk 

限制单个sendfile()调用中可以传输的数据量。如果没有限制,一个快速连接可能会完全占用工作进程。 默认2m.

 

4.7 tcp_nopush

sendfile可以开启高效的文件传输模式,tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满”, 这大大减少了网络开销,并加快了文件发送的速度


4.8 tcp_nodelay 该指令必须在keep-alive连接开启的情况下才生效,来提高网络包传输的'实时性'

启用或禁用TCP_NODELAY选项的使用。当连接转换为保持活动状态时,将启用该选项。此外,它在SSL连接、无缓冲代理和WebSocket代理上启用。

tcp_nopush到达最后一个可能因为没有“填满”而暂停的数据包时,Nginx会忽略tcp_nopush参数, 然后,tcp_nodelay强制套接字发送数据。由此可知,TCP_NOPUSH可以与TCP_NODELAY一起设置,它比单独配置TCP_NODELAY具有更强的性能。所以我们可以使用如下配置来优化Nginx静态资源的处理
注意:4.5~4.8全部合理的开启和设置,能有效的解决静态资源访问处理的问题,提升效率.

 

4.9 keepalive_timeout  长连接超时时间设置

第一个参数设置了一个超时,在此期间,keep-alive客户端连接将在服务器端保持打开状态。零值将禁用保持活动状态的客户端连接。可选的第二个参数在“Keep Alive:timeout=time”响应头字段中设置一个值。两个参数可能不同。

Mozilla和Konqueror可以识别“Keep Alive:timeout=time”标题字段。MSIE会在大约60秒内关闭保持活动连接。

 

5、server配置

5.1 listen 配置监听端口

 

5.2 server_name 服务名称

 

5.3 charset 字符集配置

 

5.4 access_log 和4.4 access_log类似 如果在server中给了会覆盖4.4中的

 

5.5 location

语法 location [ = | ~ | ~* | ^~ |@ ] uri{...}
位置 server,location
uri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式,那么nginx服务器在搜索匹配location的时候,是先使用不包含正则表达式进行匹配,找到一个匹配度最高的一个,然后在通过包含正则表达式的进行匹配,如果能匹配到直接访问,匹配不到,就使用刚才匹配度最高的那个location来处理请求。'

5.5.1 示例一 配置请求访问nginx安装目录下的静态资源

        location / {
            root   html;
            index  index.html index.htm;
        }

匹配访问ip地址加监听端口加/的请求,请求会重定向到nginx root(根目录)的html文件夹,访问index.html或者index.htm页面.

5.5.2  示例二 精准匹配 

        location = /50x.html {
            root   html;
        }

访问ip地址加监听端口加/50x.html并转发

5.5.3示例三 配置禁止访问的文件

      #location ~ /\.ht {
        #    deny  all;
        #}

5.5.3示例四 配置https访问

    # HTTPS server
    #
    #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;
    #    }
    #}

 

 

完整配置文件内容如下:

#user  nobody; 
worker_processes  1;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

worker_rlimit_nofile 65535;
events {
    use epoll;
    worker_connections  65535;
}


http {
    include       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;
    tcp_nopush     on;
    tcp_nodelay    on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        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;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #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
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #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;
    #    }
    #}

}

 

posted @ 2022-09-22 16:12  郑小超  阅读(2820)  评论(0编辑  收藏  举报