Mrfei 发表于 2018-11-11 09:02:36

nginx-1.6.3

  1.vi /etc/nginx/nginx.conf
  # For more information on configuration, see:
  #   * Official English Documentation: http://nginx.org/en/docs/
  #   * Official Russian Documentation: http://nginx.org/ru/docs/
  user nginx;
  worker_processes auto;
  error_log /var/log/nginx/error.log;
  pid /run/nginx.pid;
  #wc add1
  worker_rlimit_nofile 100000;
  events {
  #    worker_connections 1024;
  #wc add2
  worker_connections 65535;
  multi_accept on;
  use epoll;
  }
  http {
  log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_log/var/log/nginx/access.logmain;
  sendfile            on;
  tcp_nopush          on;
  tcp_nodelay         on;
  keepalive_timeout   65;
  types_hash_max_size 2048;
  #wc add3
  #    keepalive_timeout 10;
  client_header_timeout 10;
  client_body_timeout 10;
  reset_timedout_connection on;
  send_timeout 10;
  limit_conn_zone $binary_remote_addr zone=addr:5m;
  limit_conn addr 100;
  charset UTF-8;
  include             /etc/nginx/mime.types;
  default_type      application/octet-stream;
  # Load modular configuration files from the /etc/nginx/conf.d directory.
  # See http://nginx.org/en/docs/ngx_core_module.html#include
  # for more information.
  include /etc/nginx/conf.d/*.conf;
  #wc add4
  gzip on;
  gzip_disable "msie6";
  # gzip_static on;
  gzip_proxied any;
  gzip_min_length 1024;
  gzip_buffers 4 16k;
  gzip_comp_level 4;
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  #gzip_vary on;
  #wc add5
  open_file_cache max=86400 inactive=20s;
  open_file_cache_valid 30s;
  open_file_cache_min_uses 2;
  open_file_cache_errors on;
  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
  #wc add6
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 64k;
  client_max_body_size 8m;
  #wc add7
  fastcgi_pass_header Set-Cookie;
  fastcgi_intercept_errors on;
  fastcgi_cache_path /var/log/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 8 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  fastcgi_cache TEST;
  fastcgi_cache_valid 200 302 1h;
  fastcgi_cache_valid 301 1d;
  fastcgi_cache_valid any 1m;
  fastcgi_cache_min_uses 1;
  fastcgi_cache_use_stale error timeout invalid_header http_500;
  #wc add8(指示 Web 服务器将内容插入适当网页)
  ssi on;
  ssi_silent_errors on;
  ssi_types text/shtml;
  #wc add9(开启目录浏览功能;apache默认开启,nginx默认关闭)
  #autoindex on;
  #autoindex_exact_size off;
  #autoindex_localtime on;
  #    server {
  #      listen       80 default_server;
  #      listen       [::]:80 default_server;
  #      server_name_;
  #      root         /usr/share/nginx/html;
  # Load configuration files for the default server block.
  #      include /etc/nginx/default.d/*.conf;
  #      location / {
  #      }
  #      error_page 404 /404.html;
  #            location = /40x.html {
  #      }
  #      error_page 500 502 503 504 /50x.html;
  #            location = /50x.html {
  #      }
  #    }
  }
  参考1:
  http://os.51cto.com/art/201404/434930.htm
  user和pid应该按默认设置
  worker_processes 定义了nginx对外提供web服务时的worker进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)
  worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了
  worker_connections 设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高
  multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接
  use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue
  server_tokens并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的
  sendfile 可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)
  tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送
  tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值
  access_log 设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)
  keepalive_timeout给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长
  client_header_timeout 和client_body_timeout 设置请求头和请求体(各自)的超时时间。我们也可以把这个设置低些
  reset_timeout_connection 告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间
  send_timeout 指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接
  limit_conn_zone 设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态
  limit_conn 为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接
  include 只是一个在当前文件中包含另一个文件内容的指令。这里我们使用它来加载稍后会用到的一系列的MIME类型
  default_type 设置文件使用的默认的MIME-type
  gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量
  gzip_disable 为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容
  gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)
  gzip_proxied 允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求
  gzip_min_length 设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度
  gzip_comp_level 设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置
  gzip_type 设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式
  open_file_cache 打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉
  open_file_cache_valid 在open_file_cache中指定检测正确信息的间隔时间
  open_file_cache_min_uses 定义了open_file_cache中指令参数不活动时间期间里最小的文件数
  open_file_cache_errors 指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置
  2.vi /etc/sysctl.conf(网络线程优化)
  # Disable IPv6
  net.ipv6.conf.all.disable_ipv6 = 1
  net.ipv6.conf.default.disable_ipv6 = 1
  # Determines how often to check for stale neighbor entries.
  net.ipv4.neigh.default.gc_stale_time=120
  # Using arp_announce/arp_ignore to solve the ARP Problem
  net.ipv4.conf.default.arp_announce = 2
  net.ipv4.conf.all.arp_announce=2
  vm.swappiness = 0
  net.ipv4.tcp_max_tw_buckets = 5000
  net.ipv4.tcp_max_syn_backlog = 1024
  net.ipv4.tcp_synack_retries = 2
  net.ipv4.conf.lo.arp_announce=2
  net.ipv4.tcp_keepalive_time = 1800
  net.ipv4.tcp_keepalive_probes = 3
  net.ipv4.tcp_keepalive_intvl = 15
  net.ipv4.tcp_syncookies = 1
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_tw_recycle = 1
  net.ipv4.tcp_fin_timeout = 30
  执行下面命令生效
  /sbin/sysctl -p
  2.1内核参数的优化
  net.ipv4.tcp_max_tw_buckets = 6000
  timewait 的数量,默认是180000
  net.ipv4.ip_local_port_range = 1024 65000
  允许系统打开的端口范围
  net.ipv4.tcp_tw_recycle = 1
  启用timewait 快速回收
  net.ipv4.tcp_tw_reuse = 1
  开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
  net.ipv4.tcp_syncookies = 1
  开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理
  net.core.somaxconn = 262144
  web 应用中listen 函数的backlog 默认会给我们内核参数的net.core.somaxconn 限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值
  net.core.netdev_max_backlog = 262144
  每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
  net.ipv4.tcp_max_orphans = 262144
  系统中最多有多少个TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS ***,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
  net.ipv4.tcp_max_syn_backlog = 262144
  记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M 内存的系统而言,缺省值是1024,小内存的系统则是128
  net.ipv4.tcp_timestamps = 0
  时间戳可以避免序列号的卷绕。一个1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
  net.ipv4.tcp_synack_retries = 1
  为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN 的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量
  net.ipv4.tcp_syn_retries = 1
  在内核放弃建立连接之前发送SYN 包的数量
  net.ipv4.tcp_fin_timeout = 1
  如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2 状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,3你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些
  net.ipv4.tcp_keepalive_time = 30
  当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
  3.关于FastCGI 的几个指令
  fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10minactive=5m;
  这个指令为FastCGI 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间
  fastcgi_connect_timeout 300;
  指定连接到后端FastCGI 的超时时间
  fastcgi_send_timeout 300;
  向FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI 传送请求的超时时间
  fastcgi_read_timeout 300;
  接收FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI 应答的超时时间
  fastcgi_buffer_size 4k;
  指定读取FastCGI 应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为4k,所以这里设置为4k
  fastcgi_buffers 8 4k;
  指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答
  fastcgi_busy_buffers_size 8k;
  这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers 的两倍
  fastcgi_temp_file_write_size 8k;
  在写入fastcgi_temp_path 时将用多大的数据块,默认值是fastcgi_buffers 的两倍
  fastcgi_cache TEST
  开启FastCGI 缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低CPU 负载,并且防止502 错误
  fastcgi_cache_valid 200 302 1h;
  fastcgi_cache_valid 301 1d;
  fastcgi_cache_valid any 1m;
  为指定的应答代码指定缓存时间,如上例中将200,302 应答缓存一小时,301 应答缓存1 天,其他为1 分钟
  fastcgi_cache_min_uses 1;
  缓存在fastcgi_cache_path 指令inactive 参数值时间内的最少使用次数,如上例,如果在5 分钟内某文件1 次也没有被使用,那么这个文件将被移除
  fastcgi_cache_use_stale error timeout invalid_header http_500;
  不知道这个参数的作用,猜想应该是让nginx 知道哪些类型的缓存是没用的
  3.1以上为nginx 中FastCGI 相关参数,另外,FastCGI 自身也有一些配置需要进行优化,如果你使用php-fpm 来管理FastCGI,可以修改配置文件中的以下值:
  60
  同时处理的并发请求数,即它将开启最多60 个子线程来处理并发连接
  102400
  最多打开文件数
  204800
  每个进程在重置之前能够执行的最多请求数
  4.过滤带#号的行
  # grep -v "#" /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bk
  5.

页: [1]
查看完整版本: nginx-1.6.3