码农之路

nginx.conf配置文件详解

2020-03-08  本文已影响0人  文心武士
#定义Nginx运行的用户和用户组。默认用户是nobody。
user  nobody;

#Nginx进程数。默认1。
#一般一个进程足够了,可以把连接数设得很大。
#如果有SSL、gzip这些消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。
#或者要处理很多小文件,且文件总大小比内存大很多的时候,也可以把进程数增加。
worker_processes  4;

#配置nginx多核cpu。0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推。
worker_cpu_affinity 00000001 00000010 00000100 00001000;

#Nginx错误日志。错误日志级别: debug | info | notice | warn | error | crit | alert | emerg
error_log /var/log/nginx/error.log info;

#进程文件
pid /var/run/nginx.pid;

#配置Nginx worker进程最大打开文件数
#理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除
worker_rlimit_nofile 65535;

#全局配置
events
{
    #事件驱动模型。参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 
    #epoll模型适用于Linux内核2.6版本及以后的系统
    use epoll;

    #单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections 65535;

    #设置网路连接序列化,防止惊群现象发生,默认为on
    accept_mutex on; 

    #设置一个进程是否同时接受多个网络连接,默认为off
    multi_accept on; 

    #客户端请求头部的缓冲区大小。
    #根据系统分页大小设置,一般一个请求头的大小不会超过1k,由于一般系统分页都要大于1k,所以设置为系统分页大小。
    #查看系统分页可以使用 getconf PAGESIZE命令
    client_header_buffer_size 4k;

    #为打开文件指定缓存,默认是没有启用的。
    #max指定缓存最大数量,建议和打开文件数(worker_rlimit_nofile)一致;
    #inactive是指经过多长时间文件没被请求后删除缓存
    open_file_cache max=65535 inactive=60s;

    #指多长时间检查一次缓存的有效信息。如果有一个文件在inactive时间内一次没被使用,它将被移除
    open_file_cache_valid 60s;

    #open_file_cache指令中的inactive参数时间内文件的最少使用次数。
    #如果超过这个数字,文件描述符一直是在缓存中打开的,如果有一个文件在inactive时间内一次没被使用,它将被移除。
    open_file_cache_min_uses 1

}

#设定http服务器
http
{
    #文件扩展名与文件类型映射表
    include mime.types; 

    #默认文件类型
    default_type application/octet-stream; 

    #默认编码
    charset utf-8; 
    
    #服务器名字的hash表大小
    server_names_hash_bucket_size 128; 

    #设置NGINX能处理的最大请求主体大小。 如果请求大于指定的大小,则NGINX返回HTTP 413(Request Entity too large)错误。 
    #如果服务器处理大文件上传,则该指令非常重要。默认为1m。
    client_max_body_size 8m; 

    #设置用于请求主体的缓冲区大小。 默认情况下,该指令为32位系统设置一个8k缓冲区,为64位系统设置一个16k缓冲区。 
    client_body_buffer_size 16k;

    #请求头的缓冲区的大小
    client_header_buffer_size 1m; 

    #读取大型客户端请求头的缓冲区的最大数量和大小
    large_client_header_buffers 4 64k; 

    # 开启高效文件传输模式.sendfile指令指定nginx是否调用sendfile函数来输出文件。
    sendfile on; 
    
    # 防止网络阻塞
    tcp_nopush on; 
    
    # 防止网络阻塞
    tcp_nodelay on; 

    # 设置客户端连接保持活动的超时时间,在超过这个时间后服务器会关闭该链接。(单位s)
    keepalive_timeout 120; 

    # 开启目录列表访问,合适下载服务器,默认关闭.
    # 显示目录
    autoindex on; 
    
    # 显示文件大小 默认为on,显示出文件的确切大小,单位是bytes 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
    autoindex_exact_size on; 
    
    # 显示文件时间 默认为off,显示的文件时间为GMT时间 改为on后,显示的文件时间为文件的服务器时间
    autoindex_localtime on; 

    # FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;

    # gzip模块设置
    #开启gzip压缩输出
    gzip on; 
    #允许压缩的页面的最小字节数。默认是0。不管页面多大都进行压缩。
    #页面字节数从header头的content-length中获取。建议设置成大于1k的字节数
    gzip_min_length 1k; 
    #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
    gzip_buffers 4 16k; 
    #压缩版本。默认1.1
    gzip_http_version 1.1; 
    #压缩等级。1压缩比最小,处理速度快;9压缩比最大,比较消耗cpu资源,处理速度最慢。
    gzip_comp_level 2; 
    #压缩类型
    gzip_types text/plain application/x-javascript text/css application/xml;
    #选项可以让前端的缓存服务器缓存经过gzip压缩的页面
    gzip_vary on;

    #upstream 
    #轮询: 默认,每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器挂掉能自动剔除。
    #weight: 指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。
    #ip_hash: IP散列,每个请求按照访问 Ip的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决 session 一致问题
    #fair(第三方): 公平地按照后端服务器的响应时间(rt)来分配请求,响应时间(rt)小的后端服务器优先分配请求。
    #url_hash(第三方): 与ip_hash类似,但是按访问url的hash分配请求,每个url定向到同一个后端服务器,主要应用于后端服务器为缓存的场景下
    upstream upstream-name
    {
        #ip_hash
        server 127.0.0.1:9001 weight=1;
        server 127.0.0.1:9002 weight=1;
        server 127.0.0.1:9003 weight=2;
    }
    #虚拟主机的配置
    server {
        listen 80;
        server_name  127.0.0.1;
        proxy_set_header Host $http_host;
        location /api {
            proxy_pass  http://upstream-name;
        }
    }
    #虚拟主机的配置
    server
    {
        # 监听端口
        listen 80;
        # 域名可以有多个,用空格隔开
        server_name example.com;
        # HTTP 自动跳转 HTTPS
        rewrite ^(.*) https://$server_name$1 permanent;
    }
    #虚拟主机的配置
    server
    {
        # 监听端口 HTTPS
        listen 443 ssl;
        server_name example.com;
        ssl on;
        # 配置域名证书
        ssl_certificate      /etc/ssl/certificate.crt;
        ssl_certificate_key  /etc/ssl/private.key;

        ssl_session_timeout  5m;
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers  on;

        index index.html;
        root /data/html/;
        location /
        {
            proxy_pass 127.0.0.1:9000;
        }
        # 定义本虚拟主机的访问日志
        access_log /var/log/nginx/access.log access;
    }
}
上一篇下一篇

猜你喜欢

热点阅读