• nginx配置文件常用基本配置指令


    一、配置文件结构

    #全局块
    ...
    
    #events块 
    events { 
        ... 
    }
    
    #stream块,可以有多个upstream,server块
    stream {
    
        #upstream块,供负载均衡使用
        upstream name{
            ...       
        }
        
        #server块,不包含location块
        server {
            ...
        }
    }
    
    #http块,一个http块可以有多个upstream,server块
    http {
        
        #http全局块
        ...
        
        #upstream块,供负载均衡使用
        upstream name{
            ...       
        }
         
        #server块,一个server块可以有多个location块
        server {
            #server全局块
            ...
            
            #location块
            location {
                ...
            }
        }
    }

    二、配置文件的基础配置指令

    ##运行nginx进程的用户及用户组,只有被设置的用户和用户组才有权限运行nging进程 
    ##语法:  user username[groupname], 默认: user nobody; worker 的用户为 nobody,Master 的用户为 root
    ##若用户在configure执行命令时,使用了参数--user=usergroup 和 --group=groupname,此时nginx.conf将使用参数中指定的用户和用户组
    user  nobody;
    
    ##工作进程数,默认1,通常是CPU数量或者CPU数量的2倍 
    ##设置为auto时nginx进程自动检测,根据CPU数量调整
    worker_processes auto; 
     
    ##全局错误日志存放路径和名称,日志记录级别: [debug|info|notice|warn|error|crit|slter|emerg],默认error
    ##此处使用的是相对路径,相对nginx的安装目录 
    ##可以在全局块、http块、server块、以及location块中配置
    error_log logs/error.log    info; 
    
    ##PID文件位置
    pid  logs/nginx.pid;  
    
    ##一个nginx work进程打开的最多文件描述符数目
    ##理论值为最多打开文件数(ulimit -n)与nginx进程数相除,建议与ulimit -n 的值保持一致
    worker_rlimit_nofile 65535;
    
    
    ###events块设置###
    events {   
        ##单个worker进程的最大连接数
        ##nginx的最大连接数=worker_processes*worker_connections
        worker_connections 1024;     
        
        ##每个worker进程同时接收多个新连接 
        ##默认off,每个worker进程每次只接受一个新连接
        multi_accept on;  
        
        ##use [kqueue|rtsig|epoll|/dev/poll|select|poll]
        ##Linux 2.6以上版本使用epoll,FreeBSD使用kqueue,window不指定
        use epoll;        
    }
    
    http {   
        ##文件扩展名与文件类型映射表 
        include mime.types; 
        ##默认文件类型     
        default_type application/octet-stream;     
    
        ##日志格式设置,main为日志格式的名字,只能在http块配置  
        ##$remote_addr: 客户端ip地址
        ##$http_x_forwarded_for: 记录客户端真实ip
        ##$remote_user: 客户端用户名称
        ##$time_local: 访问时间与时区
        ##$request: 请求的url与http协议
        ##$status: 请求状态
        ##$body_bytes_sent: 发送给客户端文件主体内容大小
        ##$http_referer: 从哪个页面链接访问过来的
        ##$http_user_agent: 客户端浏览器的相关信息
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
            
            
        ##nginx访问日志,main为log_format设置的日志格式名字
        ##与log_format配合使用,可以在http块,server块和location块中配置
        access_log  logs/access.log  main;  
           
        ##开启高效传输模式,将文件的回写过程交给数据缓冲,而不是放在应用中
        ##可以在http块,server块和location块中配置
        sendfile    on;
        ##一个数据包中发送所有头文件,而不是单独发,防止网络阻塞,需要开启sendfile   
        tcp_nopush    on;  
        ##不缓存数据,而是立即发送数据,防止网络阻塞,需要开启sendfile   
        tcp_nodelay     on;      
    
        ##与客户端建立连接后,保持连接(即长连接)的最长时间,单位是秒(默认75s)
        keepalive_timeout 90;  
          
        ##开启gzip压缩输出,默认off
        gzip on; 
        
        ##隐藏nginx版本号  
        server_tokens   off;
        
        ###服务器主机配置,一个http中可以配置多个server###
        server {   
            ##监听的本机端口              
            listen        80;
            
            ##监听的主机名或IP或域名
            ##后面可以跟多个主机名称,处理HTTP请求时,nginx会取出header头中的Host,与每个server中的server_name进行匹配,以此决定到底由那一个server来处理这个请求
            ##有可能一个Host与多个server块中的server_name都匹配,这时会根据匹配优先级来选择实际处理的server块
            server_name    localhost; 
            
            #编码,默认koi8-r
            charset koi8-r;
            
            #日志
            access_log  /var/log/nginx/host.access.log  main;
            error_log   logs/error.log;
            
            #匹配规则
            location / {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
    
            }
            
            #404 返回页面
            error_page  404              /404.html;
    
            #其他错误代码返回页面
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

    三、配置文件其他常用的配置指令

    一)客户端相关配置指令

    属于ngx_http_core_module模块,可在http块、server块、location块中设置

    更多详情请参考官网:http://nginx.org/en/docs/http/ngx_http_core_module.html

    #指定客户端请求主体缓冲区的大小,若请求主体大于缓冲区,那么整个请求主体或某些部分都将写入临时文件中
    #默认大小等于两个页面大小,具体取决于平台是8K还是16K
    client_body_buffer_size  16k;
    
    #客户端请求正文的临时文件的存放目录,默认client_body_temp
    client_body_temp_path [level1 [level2 [level3]]];
    
    #读取客户端请求主体的超时时间,单位s,默认60s
    #仅在两次连续读取操作之间的一段时间内设置超时,而不是为整个请求主体的传输设置超时
    #如果客户端在此时间内未传输任何内容,则nginx请求终止并返回408(即请求超时)错误
    client_body_timeout 60;  
    
    #客户端请求头的缓冲区大小,默认1K
    #请求头超过该值时,使用指令large_client_header_buffers设置更大缓冲区的大小
    client_header_buffer_size 32k; 
    
    #大型客户端请求中请求头缓存区个数和每个区的大小,默认 4 8k        
    large_client_header_buffers 4 32k; 
    
    #读取客户端请求头超时时间,单位s,默认60s
    ##如果客户端在此时间内未传输请求头,则nginx请求终止并返回408(即请求超时)错误
    client_header_timeout 60; 
    
    #客户端请求的最大主体大小,默认1MB
    #如果请求中主体的大小超过配置的值,则会向客户端返回413(请求实体太大)错误
    #为0时将禁用客户端请求主体大小的检查
    client_max_body_size 1m;
    
    #与客户端建立连接后,保持连接(即长连接)的最长时间,单位s,默认75s
    keepalive_timeout 75s;
    
    #与客户端建立连接后,客户端发送请求的最大次数,当最大请求次数达到时,连接被关闭,默认100
    #使用过多的最大请求数可能会导致过多的内存使用
    keepalive_requests    100;
    
    #响应客户端时间,Nginx发送数据到客户端的超时时间,单位s,默认60s
    #仅在两个连续的写操作之间设置,而不用于传输整个响应
    #如果客户端在此时间内未收到任何信息,则连接将关闭
    send_timeout 60;

    二)gzip压缩相关配置指令

    属于ngx_http_gzip_module模块,可在http块,server块,location块中设置,一般在http块中设置

    更多详情请参考官网: http://nginx.org/en/docs/http/ngx_http_gzip_module.html

    #开启gzip压缩输出,默认off
    gzip on;   
    
    #压缩缓冲区的个数和每个区的大小
    #默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K
    gzip_buffers 16 8k;  
    
    #压缩等级,1-9,等级越高,压缩效果越好,节约宽带,但CPU消耗大,默认为1   
    gzip_comp_level 1; 
    
    #压缩所需的最低HTTP版本请求
    #默认1.1,前端如果是squid2.5请使用1.0      
    gzip_http_version 1.1;  
    
    #允许压缩的页面的最小字节数,默认20
    gzip_min_length 1024;  
    
    #要压缩文件的类型,默认text/html
    #无论是否指定,"text/html"类型总会被压缩 
    gzip_types text/plain     application/x-javascript     text/css     application/xml;
    
    #如果gzip,gzip_static,gunzip开启,是否启用 "Vary: Accept-Encoding" 响应头部字段,默认off
    gzip_vary on;  

    三)FastCGI相关配置指令

    属于ngx_http_fastcgi_module模块,允许将请求传递到FastCGI服务器

    可在http块,server块,location块中设置

    更多详情请参考官网: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html

    配置示例:

    location / {
      fastcgi_pass   localhost:  9000;
      fastcgi_index  index.php;
    
      fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;
      fastcgi_param  QUERY_STRING     $query_string;
      fastcgi_param  REQUEST_METHOD   $request_method;
      fastcgi_param  CONTENT_TYPE     $content_type;
      fastcgi_param  CONTENT_LENGTH   $content_length;
    }

    指令:

    #读取从FastCGI服务器接收到的响应的第一部分的缓冲区的大小
    #默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K
    fastcgi_buffer_size 4k;
    
    #启用或禁用来自FastCGI服务器的响应缓冲,默认on
    fastcgi_buffering on;
    
    #从FastCGI服务端收到的响应信息的缓冲区大小以及缓冲区数量
    #认情况下,一个缓冲区的大小相当于一个页面的大小。根据平台的不同设置为4K/8K
    fastcgi_buffers 8 8k; 
    
    #系统很忙时可以使用的fastcgi_buffers大小
    fastcgi_busy_buffers_size 16k;
    
    #Nginx服务器和后端FastCGI服务器连接的超时时间,单位s,默认60s
    fastcgi_connect_timeout 60s;
    
    #从FastCGI服务端读取响应信息的超时时间,单位s,默认60s
    #超时仅在两次连续的读取操作之间设置,而不用于传输整个响应
    #如果FastCGI服务器在此时间内未传输任何内容,则连接将关闭
    fastcgi_read_timeout 60s; 
    
    #传递给FastCGI服务器的参数
    #parameter: 传递的参数
    #value: 参数值,可以是字符串、变量及其它们的组合
    fastcgi_param parameter value;
    
    #请求传输到FastCGI服务端的超时时间,单位s,默认60s
    #超时仅在两个连续的写操作之间设置,而不用于整个请求的传输
    #如果FastCGI服务器在此时间内未收到任何信息,则连接将关闭
    fastcgi_send_timeout 60s;
    
    #整个响应都无法放入由fastcgi_buffer_size和fastcgi_buffers 伪指令设置的缓冲区中,则可以将一部分响应保存到临时文件中,默认1024m
    #需要设置fastcgi_buffering on;
    fastcgi_max_temp_file_size 1024m;
    
    #限制每次写入临时文件的数据量的大小
    #需要设置fastcgi_buffering on;
    fastcgi_temp_file_write_size 6k;
    
    #从FastCGI服务器接收到数据存放的临时文件,默认fastcgi_temp
    fastcgi_temp_path fastcgi_temp;

    四)upstream相关配置指令

    属于ngx_http_upstream_module模块,仅可在stream模块中设置

    更多详情请参考官网: http://nginx.org/en/docs/http/ngx_http_upstream_module.html

    #负载均衡调度算法,轮询,默认,将请求传递到随机选择的服务器,同时考虑服务器的权重
    random;
    
    #负载均衡调度算法,key可以包含文本,变量,以及它们的组合
    hash key [consistent];
        
    #负载均衡调度算法,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
    ip_hash;
    
    #后端服务器组,address可以是ip:port,域名
    #parameters支持如下参数:  
    #weight=number: 请求发送到后端服务器的权重比,默认1
    #max_conns=number: 后端服务器的最大连接数量,默认值为零,表示没有限制
    #max_fails: 与后端服务器连接失败的最大重连次数,默认1
    #fail_timeout: 与后端服务器连接失败后重新发起请求的时间,默认10
    #backup: 备份服务器,其它所有的非backup机器不可用时,请求backup机器,此台机器压力最轻
    #down: 标记服务器为不可用
    server address [parameters];
    
    #定义共享zone的name和size,以保留在工作进程之间共享的组的配置和运行时状态
    zone name size;
    
    #设置后端服务器与nginx work进程之间保持连接的最大空闲数量
    #当这个数量被突破时,使用最少的连接将被关闭
    keepalive    1000; 

    五)反向代理相关配置指令

    属于ngx_http_proxy_module模块,可在http块,server块,location块中设置

    更多详情请参考官网: http://nginx.org/en/docs/http/ngx_http_proxy_module.html

    1 proxy buffer(代理缓冲)相关配置指令

    代理缓冲的作用以及过程:

    实现了被代理服务器与客户端的异步响应
    
    启用代理服务器缓冲后,nginx服务器首先会尽可能的从被代理服务器那里收取响应数据,将其保存到buffer中,buffer的大小由 proxy_buffer_size 指令和 proxy_buffers 指令决定;
    如果在接收过程中,发现buffer没有足够大小来接收一次响应的数据,nginx服务器会将部分接收到的数据临时存放到磁盘的临时文件中;
    磁盘上的临时文件路径由 proxy_temp_path 指令设置,临时文件每次写入大小和总大小由 proxy_max_temp_file_size 指令和 proxy_temp_file_write_size 指令决定; 一次响应数据被接收完成或者buffer已经装满,nginx服务器开始向客户端传输数据; 每个bufter装满数据后,在从开始向客户端发送一直到buffer中的数据全部传输给客户端的整个过程中,它都处于BUSY状态,期间对它进行的其他操作都会失败; 同时处于BUSY状态的buffer总大小由 proxy_busy_buffers_size 指令限制,不能超过该指令设置的大小
    当代理缓冲关闭时,nginx服务器只要接收到响应数据就会同步地传递给客户端

    指令:

    #是否启用代理服务器响应缓冲,默认on
    proxy_buffering on;
    
    #从被代理服务器接收一次响应数据的缓冲区的个数和每个buffer的大小,总大小=num*size
    #默认情况下,每个缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K
    proxy_buffers  8 8k;  
    
    #用于读取从代理服务器接收到的响应的第一部分的缓冲区的大小
    #默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K
    proxy_buffer_size  8k;
    
    #BUSY状态下的缓冲区的总大小,默认8K或16K  
    proxy_busy_buffers_size size;
    
    #存放从被代理服务器接收到的数据的临时文件
    #path: 临时文件路径
    #level: 在path下的第几级目录下存放临时文件,level_1表示path目录下名字长度为level_1的一级目录,level_2表示path目录下名字长度为level_2的二级目录
    proxy_temp_path path [level_1 [level_2]];
    
    #每次写入临时文件的数据大小
    proxy_temp_file_write_size 16k;  
    
    #临时文件的总大小,默认1024M
    proxy_max_temp_file_size 1024m;

    2 proxy cache(代理缓存)相关配置指令

    代理缓存的作用以及过程:

    实现了nginx服务器对客户端请求的快速响应,减少响应时间
    nginx服务器一方面通过proxy buffer机制将数据异步传递给客户端,另一方面根据proxy cache机制将这些数据缓存到本地硬盘上;
    当客户端下次重新访问相同的数据时,nginx服务器直接从硬盘检索到对应的数据返回给客户端,从而减少与被代理服务器的响应时间 proxy cache机制依赖于proxy buffer机制,只有在proxy buffer机制启用的时候proxy cache才会生效

    指令:

    #启动proxy cache,默认关闭,zone是使用的共享空间的名称,对应proxy_cache_path指令的keys_zone的值
    proxy_cache zone(off);
     
    #缓存时的密钥,支持nginx内置变量,默认$scheme $proxy_host $request_uri;
    proxy_cache_key $scheme $proxy_host $request_uri;
    
    #当客户端向被代理服务器发送相同请求到达number次后,nginx服务器才会对该请求的响应数据做缓存,number默认1
    proxy_cache_min_uses 1;
    
    #缓存存放目录
    #path: 缓存存放路径,如/app/nginx_cachedata
    #levels=1:2: 设置目录结构,表示path下还有两级目录
    #keys_zone: 设置缓存空间的名称和大小,如keys_zone=cachedata:  500m
    #inactive: 缓存内容的有效期,超过有效期自动清除缓存,如inactive=7d
    #max_size: 缓存空间的最大值,达到最大值时,回一次删除访问量最少的缓存内容,如max_size=10g
    #use_temp_path: 默认on,表示缓存数据会首先写入临时文件,写完后重命名并保存到缓存路径下。若为 off,则nginx会将缓存文件直接写入指定的缓存目录,而不使用proxy_temp_path指定的临时存储路径
    proxy_cache_path path levels=1:2 keys_zone=name:size inactive=time max_size=size use_temp_path=on;
    
    #根据返回的HTTP状态码设置缓存时间
    proxy_cache_valid code time;

    3 反向代理相关配置指令

    #与被代理服务器建立连接的超时时间,单位s,默认60s
    proxy_connect_timeout     60s;   
    
    #禁止指定请求头转发到被代理服务器
    proxy_hide_header field;
    
    #被代理服务器的HTTP协议版本,默认1.0
    proxy_http_version 1.1;
    
    #设置被代理服务器
    proxy_pass  URL;
    
    #允许被禁止转发的请求头转发到被代理服务器
    proxy_pass_header field;
    
    #nginx向被代理服务器发送数据后,等待响应的超时时间,单位s,默认60s  
    #超时仅在两次连续的读取操作之间设置,而不用于传输整个响应
    #如果代理服务器在此时间内未传输任何内容,则连接将关闭  
    proxy_read_timeout        60s;  
    
    #更改被代理服务器返回的响应头中的Location头域和Refresh头域
    proxy_redirect off;
    
    #nginx发送数据给被代理服务器的超时时间,默认60s
    #超时仅在两个连续的写操作之间设置,而不用于整个请求的传输
    #如果代理服务器在此时间内未收到任何信息,则连接将关闭
    proxy_send_timeout        60s; 
    
    #重新定义传递给代理服务器的请求体
    #value: 包含文本,变量,或者它们的组合
    proxy_set_body value;
    
    #在传递给代理服务器的请求标头中重新定义或附加字段
    #field: 要传递的字段名
    #value: 包含文本,变量,或者它们的组合
    proxy_set_header field value;
  • 相关阅读:
    用JavaScript玩转计算机图形学(二)基本光源
    两条像面试用的编程问题,和我的囧事
    混合语言的游戏开发系统架构
    为你详解Linux安装GCC方法
    Windows Phone 7常用资源大集合
    html5之Web Workers示例
    MFC/Win32中使用GDI+
    linux yum命令详解
    Linux development tools
    HTML5之Canvas标签简要学习
  • 原文地址:https://www.cnblogs.com/gudanaimei/p/14376998.html
Copyright © 2020-2023  润新知