美文网首页
nginx(二)

nginx(二)

作者: boylicj | 来源:发表于2019-03-12 20:57 被阅读0次

    前言

    • 未来会围绕nginx系列写几篇文章。包含自己理解的,用到的,学到的,希望和大家一起互相激励,发现、解决问题,共同进步。

    目录

    • nginx配置结构(续上一篇nginx(一))

    nginx config配置详解
    1. http(需要重点关注的部分)

    MIME-Type
    设置nginx能识别的网络资源媒体类型,如html、js、css等
    默认为text/plain.

    log_format
    log_format MyTest 'remote_addr -remote_user [time_local] "request" '
    'statusbody_bytes_sent "http_referer" ' '"http_user_agent" "$http_x_forwarded_for"';
    其中MyTest为日志格式的名字,后面的为nginx的内部变量组成的一串字符串。

    access_log logs/access.log MyTest
    定义日志的路径以及采用的日志格式,该参数可以在server配置块中定义。

    sendfile on
    是否调用sendfile函数传输文件,默认为off,使用sendfile函数传输,可以减少user mode和kernel mode的切换,从而提升服务器性能。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。

    sendfile_max_chunk 128k
    规定Nginx worker process每次调用sendfile()函数传输数据的最大值,默认值为0,设置为0则无限制。

    tcp_nopush on
    tcp_nopush设置为on时,会调用tcp_cork方法进行数据传输。
    使用该方法会产生这样的效果:当应用程序产生数据时,内核不会立马封装包,而是当数据量积累到一定量时才会封装,然后传输。这样有助于解决网络堵塞问题。默认值为on。

    keepalive_timeout 65 60
    该参数有两个值,第一个值设置nginx服务器与客户端会话结束后仍旧保持连接的最长时间,单位是秒,默认为75s。
    第二个值可以省略,它是针对客户端的浏览器来设置的,可以通过curl -I看到header信息中有一项Keep-Alive: timeout=60,如果不设置就没有这一项。
    第二个数值设置后,浏览器就会根据这个数值决定何时主动关闭连接,Nginx服务器就不操心了。但有的浏览器并不认可该参数。

    send_timeout
    这个超时时间是发送响应的超时时间,即Nginx服务器向客户端发送了数据包,但客户端一直没有去接收这个数据包。
    如果某个连接超过send_timeout定义的超时时间,那么Nginx将会关闭这个连接。

    client_max_body_size 10m
    浏览器在发送含有较大HTTP包体的请求时,其头部会有一个Content-Length字段,client_max_body_size是用来限制Content-Length所示值的大小的。这个限制包体的配置不用等Nginx接收完所有的HTTP包体,就可以告诉用户请求过大不被接受。会返回413状态码。例如,用户试图上传一个1GB的文件,Nginx在收完包头后,发现Content-Length超过client_max_body_size定义的值,就直接发送413(Request Entity Too Large)响应给客户端。

    gzip on
    是否开启gzip压缩。

    gzip_min_length 1k
    设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。

    gzip_buffers 4 16k
    设置系统获取几个单位的buffer用于存储gzip的压缩结果数据流。4 16k代表分配4个16k的buffer

    gzip_http_version 1.1
    用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户会看到乱码,所以为了支持前期版本加上了这个选项。如果你用了Nginx反向代理并期望也启用Gzip压缩的话,由于末端通信是http/1.1,故请设置为 1.1。

    gzip_comp_level 6
    gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

    gzip_types mime-type ...
    匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。
    在conf/mime.conf里查看对应的type。
    示例:gzip_types text/plain application/x-javascript text/css text/html application/xml;

    gzip_proxied any
    Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
    以下为可用的值:
    off - 关闭所有的代理结果数据的压缩
    expired - 启用压缩,如果header头中包含 "Expires" 头信息
    no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
    no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
    private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
    no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
    no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
    auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
    any - 无条件启用压缩

    gzip_vary on
    和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。

    1. server(虚拟主机相关,后面的nginx系列中也会把server单拎出来讲)

    server{} 包含在http{}内部,每一个server{}都是一个虚拟主机(站点)。
    以下为nginx.conf配置文件中server{}部分的内容。

    server {
        listen       80;  //监听端口为80,可以自定义其他端口,也可以加上IP地址,如,listen 127.0.0.1:8080;
        server_name  localhost; //定义网站域名,可以写多个,用空格分隔。
        #charset koi8-r; //定义网站的字符集,一般不设置,而是在网页代码中设置。
        #access_log  logs/host.access.log  main; //定义访问日志,可以针对每一个server(即每一个站点)设置它们自己的访问日志。
    
        ##在server{}里有很多location配置段
        location / {
            root   html;  //定义网站根目录,目录可以是相对路径也可以是绝对路径。
            index  index.html index.htm; //定义站点的默认页。
        }
    
        #error_page  404              /404.html;  //定义404页面
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;  //当状态码为500、502、503、504时,则访问50x.html
        location = /50x.html {
            root   html;  //定义50x.html所在路径
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #定义访问php脚本时,将会执行本location{}部分指令
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;  //proxy_pass后面指定要访问的url链接,用proxy_pass实现代理。
        #}
    
        # 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服务器监听端口与地址,支持两种形式,1 IP:Port, 2 unix:/path/to/sockt
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  //定义SCRIPT_FILENAME变量,后面的路径/scripts为上面的root指定的目录
        #    include        fastcgi_params; //引用prefix/conf/fastcgi_params文件,该文件定义了fastcgi相关的变量
        #}
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        # 
        #location ~ /\.ht {   //访问的url中,以/.ht开头的,如,www.example.com/.htaccess,会被拒绝,返回403状态码。
        #    deny  all;  //这里的all指的是所有的请求。
        #}
    }
    
    
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;  //监听8000端口
    #    listen       somename:8080;  //指定ip:port
    #    server_name  somename  alias  another.alias;  //指定多个server_name
    
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    
    
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;  //监听443端口,即ssl
    #    server_name  localhost;
    
    ### 以下为ssl相关配置
    #    ssl_certificate      cert.pem;    //指定pem文件路径
    #    ssl_certificate_key  cert.key;  //指定key文件路径
    
    #    ssl_session_cache    shared:SSL:1m;  //指定session cache大小
    #    ssl_session_timeout  5m;  //指定session超时时间
    #    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   //指定ssl协议
    #    ssl_ciphers  HIGH:!aNULL:!MD5;  //指定ssl算法
    #    ssl_prefer_server_ciphers  on;  //优先采取服务器算法
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    
    1. location(server里面)
      位于server里面,配置访问匹配的一些内容(后面nginx系列中会有单独实例部分介绍)

    nginx(三)中将列举实例介绍server、location

    相关文章

      网友评论

          本文标题:nginx(二)

          本文链接:https://www.haomeiwen.com/subject/coznpqtx.html