Nginx配置文件优化

user  nginx;

worker_processes  8;

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

## nginx默认是没有开启利用多核cpu的配置的。需要通过增加worker_cpu_affinity配置参数来充分利用多核cpu,cpu是任务处理,当计算最费时的资源的时候,cpu核使用上的越多,性能就越好。

解释:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推;worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。

worker_rlimit_nofile 10240;

## 指定进程可以打开的最大描述符这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit - n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit - n的值保持一致。现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3 - 4时就有进程可能超过10240了,这时会返回502错误。

error_log  /vcfilm/logs/nginx/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

 

#pid        logs/nginx.pid;

 

 

events {

use epoll;

## 语法  use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];

     use epoll;      # 使用epoll(linux2.6的高性能方式)

worker_connections  204800;   
# 每个进程最大连接数(最大连接=连接数×进程数)

}

 

 

http {

include       mime.types;

## Nginx 会根据mime type定义的对应关系来告诉浏览器如何处理服务器传给浏览器的这个文件,是打开还是下载

default_type  application/octet-stream;

## 比如Nginx默认的配置中default_type application/octet-stream; 这个就是默认为下载,浏览器访问到未定义的扩展名的时候,就默认为下载该文件;如果将这个设置改成default_type text/html;那就是告诉浏览器默认的打开方式是把所有未设置的扩展名当HTML文件打开,虽然可能这样设置会很多打不开。

mime type 和文件扩展名的对应关系一般放在 mime.types这个文件里,然后用 include mime.types; 来加载

mime.types文件里是用types指令来定义的,下面是一个完整的定义:

 

 

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

## sendfile: 设置为on表示启动高效传输文件的模式。sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据。如果这个参数不开启,会先在用户空间(Nginx进程空间)申请一个buffer,用read函数把数据从磁盘读到cache,再从cache读取到用户空间的buffer,再用write函数把数据从用户空间的buffer写入到内核的buffer,最后到tcp socket。开启这个参数后可以让数据不用经过用户buffer。

sendfile 可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)。

send_timeout    10s;

#tcp_nopush     on;

## 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。

server_names_hash_bucket_size 512;

##保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果 hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键值。因此,如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.

client_header_buffer_size 20k;

    large_client_header_buffers 4 40k;

    client_max_body_size 80m;

    server_tokens off;

## 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。

    log_format json_logs '{"@timestamp":"$time_iso8601",'

                 '"host":"$upstream_addr",'

                 '"clientip":"$remote_addr",'

                 '"request_method":"$request_method",'

                 '"size":"$body_bytes_sent",'

                 '"responsetime":"$request_time",'

                 '"upstreamtime":"$upstream_response_time",'

                 '"upstreamhost":"$upstream_addr",'

                 '"http_host":"$host",'

                 '"url":"$uri",'

                 '"referer":"$http_referer",'

                 '"agent":"$http_user_agent",'

                 '"status":"$status"}';

## nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式;另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,可以参加ngx_http_log_module。一般在nginx的配置文件中日记配置

参数                 说明                             示例

$remote_addr        客户端地址                    211.28.65.253

$remote_user        客户端用户名称                  --

$time_local          访问时间和时区           18/Jul/2012:17:00:01 +0800

$request   请求的URI和HTTP协议        "GET /article-10000.html HTTP/1.1"

$http_host       请求地址,即浏览器中你输入的地址(IP或域名)     www.wang.com 192.168.100.100

$status            HTTP请求状态                        200

$upstream_status    upstream状态                          200

$body_bytes_sent  发送给客户端文件内容大小               1547

$http_referer url跳转来源                                   https://www.baidu.com/

$http_user_agent  用户终端浏览器等信息                           "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;

$ssl_protocol         SSL协议版本                        TLSv1

$ssl_cipher         交换数据中的算法                     RC4-SHA

$upstream_addr    后台upstream的地址,即真正提供服务的主机地址     10.10.10.100:80

$request_time      整个请求的总时间                       0.205

$upstream_response_time  请求过程中,upstream响应时间                    0.002

    #keepalive_timeout  0;

keepalive_timeout  120 110;

## 第一个是连接超时时间      ## 第二个是报文头部的超时时间

##  给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。

fastcgi_send_timeout 3000;

##指定向FastCGI传送请求的超时时间,这个值是已经完成两次握手后向FastCGI传送请求的超时时间

fastcgi_read_timeout 3000;

## 指定接收FastCGI应答的超时时间,这个值是已经完成两次握手后接收FastCGI应答的超时时间。

fastcgi_buffer_size 160k;

##用于指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个160KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。

fastcgi_buffers 16 160k;

## 指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。

fastcgi_busy_buffers_size 320k;

## 默认值是fastcgi_buffers的两倍

fastcgi_temp_file_write_size 320k;

## 表示在写入缓存文件时使用多大的数据块,默认值是fastcgi_buffers的两倍

tcp_nodelay on;

## Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。

https://www.cnblogs.com/yezhaohui/p/4377662.html   参考文档

    gzip  on;  ##是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量

    gzip_min_length  1k;

    gzip_buffers     4 160k;

## 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。

如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

 

    #gzip_http_version 1.0;

## 启用gzip压缩的最小文件,小于设置值的文件将不会压缩

    gzip_comp_level 2;

# # gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明

    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

##设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式

    gzip_disable "MSIE [1-6]\.";

    gzip_vary off;

##是否在http header中添加Vary: Accept-Encoding,建议开启

 

    include       vhost/*.conf;

## 只是一个在当前文件中包含另一个文件内容的指令

    server {

        listen       80;

        server_name  *.vcfilm.cn;

        server_name  *.vcfilm.cn;

        index index.html index.htm index.php index.shtml index.shtml;

 

        #charset koi8-r;

 

        #access_log  logs/host.access.log  main;

 

        location / {

        proxy_pass http://192.168.1.27:84/;(MCS等php平台)

        proxy_set_header Host $host;

        proxy_set_header        X-Real-IP $remote_addr;

            X-Forwarded-For $proxy_add_x_forwarded_for;

        }

## 文档介绍https://blog.csdn.net/a19860903/article/details/49914131

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值