• 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;
        #    }
        #}
    
    }
  • 相关阅读:
    让Flask-admin支持markdown编辑器
    单例模式
    【Python】关于如何判断一个list是否为空的思考
    【Python】抽象工厂模式
    【Python篇】工厂模式
    【Python】直接赋值,深拷贝和浅拷贝
    【Python】可变对象和不可变对象
    【Python】__name__ 是什么?
    【Python】any() 或者 or
    [Python] list vs tupple
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/16718726.html
Copyright © 2020-2023  润新知