linux学习:Nginx--常见功能配置片段与优化-06

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习:Nginx--常见功能配置片段与优化-06相关的知识,希望对你有一定的参考价值。

1、常用片段

1.1 server配置为监听ip和端口

server{
  listen 127.0.0.1:9080;
  server_name 127.0.0.1;
}

1.2 server配置为监听域名和端口

server{
  listen 80;
  server_name www.sishuok.com sishuok.com *.sishuok.com;
}

1.3 向后台服务器传递客户端的真实ip

location ~ \.(jsp|action|mvc)$ {
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $remote_addr;
  proxy_pass http://xiaoliu.com;
}

1.4 在负载均衡里面,实现后端服务器故障转移的配置

location ~ \.(jsp|action|mvc)$ {
  proxy_next_upstream http_502 http_504 timeout;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $remote_addr;
  proxy_pass http://server_pool;
}

1.5 简单的防盗链

location / {
  ……
  valid_referers blocked sishuok.com *.sishuok.com;
  if($invalid_referer){
     rewrite ^/ http://sishuok.com;
  }
}

1.6 简单的限制下载速度

location / {
    limit_rate 256K; 
}

1.7 使用proxy_cache的配置

http{    
    #下面这两个path指定的路径必须在同一个分区
    proxy_temp_path /cachetemp/proxy_temp_path;
    #设置名称为mycache,内存缓存100m,自动清除1天未使用的内容,硬盘缓存空间1g
    proxy_cache_path /cachetemp/proxy_cache_path levels=1:2 keys_zone=mycache:100m
    inactive=1d max_size=1g;
    server{
        location ~ .*\.(gif|jpg|html|js|css)$ {
            proxy_cache mycache; #使用名称为mycache的缓存
            #对不同的Http状态码设置不同的缓存时间
            proxy_cache_valid 200 304 24h;
            proxy_cache_valid 301 302 10m;
            proxy_cache_valid any 1m;
            #设置缓存的key值
            proxy_cache_key $host$uri$is_args$args;
        }
    }
}

2、优化部分

2.1 配置1

a、如果没有足够的实力和必要去自己改写nginx,那么Nginx的优化主要就是:

 优化Nginx的配置,做到合理高效的使用

b、优化的方向和目标,无外乎:

   尽量提高单台机器处理效率

   尽量降低单台机器的负载

   尽量降低磁盘I/O

   尽量降低网络I/O

   尽量减少内存使用

   尽量高效利用CPU

c、生产环境下,应该使Nginx模块最小化,就是用到哪几个就开哪几个,这个需要在编译安装Nginx的时候做。

d、用户和组,生产环境下,最好是专为Nginx创建用户和组,并单独设置权限,这样会更安全。例如: user nginx nginx

e、worker_processes :通常配置成cpu的总核数,或者其2倍,性能会更好。这可以减少进程间切换带来的消耗。 

 还可以同时使用worker_cpu_affinity来绑定cpu,使得每个worker进程独享一个cpu,实现完全的并发,性能更好,不过这个只对linux系统有效。

f、events里面的事件模型,Linux推荐使用epoll模型,FreeBSD推荐采用kqueue

g、worker_rlimit_nofile:描述一个nginx进程打开的最多的文件数目,配置成跟linux内核下文件打开数一致就可以了。

  可以通过ulimit -n 来查看,新装的系统默认是1024,CentOS中可以如下方式进行修改:在/etc/security/limits.conf最后增加:

        * soft nofile 65535
        * hard nofile 65535
        * soft nproc 65535
        * hard nproc 65535

h、worker_connections:每个进程允许的最多连接数,默认是1024,可以设置大一些。

   理论上并发总数是worker_processes和worker_connections的乘积,worker_connections值的设置跟物理内存大小有关,因为系统可以打开的最大文件数和内

   存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右,所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的

   最大文件总数进行适当地进行设置。

i、keepalive_timeout:设置到65左右就可以

2.2 配置2

a、client_header_buffer_size:设置请求的缓存,设置为4k,通常为系统分页大小的整数倍,可以通过getconf PAGESIZE 来查看系统分页大小。

b、对打开文件设置缓存

   open_file_cache max=建议设置成和每个进程打开的最大文件数一致 inactive=60s;

   open_file_cache_valid 90s;

   open_file_cache_min_uses 2;

   open_file_cache_errors on;

c、尽量开启Gzip压缩,gzip_comp_level通常设置成3-5,高了浪费CPU

d、Error日志优化:运行期间设置为crit,可以减少I/O

e、access日志优化:如果使用了其他统计软件,可以关闭日志,来减少磁盘写,或者写入内存文件,提高I/O效率。

f、sendfile指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,通常应设置成on,如果是下载等应用磁盘IO重负载应用,可设置为 off

g、Buffers size优化:如果buffer size太小就会到导致nginx使用临时文件存储response,这会引起磁盘读写IO,流量越大问题越明显。

   client_body_buffer_size 处理客户端请求体buffer大小。用来处理POST提交数据,上传文件等。client_body_buffer_size 需要足够大以容纳需要上传的POST数据。同理还有后端的buffer数据。

h、worker_priority进程优先级设置:Linux系统中,优先级高的进程会占用更多的系统资源,这里配置的是进程的静态优先级,取值范围-20到+19,-20级别最高。因此可以把这个值设置小一点,但不建议比内核进程的值低(通常为-5)

i、合理设置静态资源的浏览器缓存时间,尽量用浏览器缓存

j、负载均衡锁accept_mutex,建议开启,默认就是开启的

k、如果使用SSL的话,而且服务器上有SSL硬件加速设备的话,请开启硬件加速。


本文出自 “我爱大金子” 博客,请务必保留此出处http://1754966750.blog.51cto.com/7455444/1913198

以上是关于linux学习:Nginx--常见功能配置片段与优化-06的主要内容,如果未能解决你的问题,请参考以下文章

linux学习:Nginx--基本配置-02

nginx安装和常见的配置

18.tornado项目的部署和运行(采用Linux常见应用服务配置模式nginx+supervisord)

Linux编译安装Nginx源码常见选项

linux学习linux配置网卡以及常见网络问题排查

Nginx中的模块分类及常见配置项说明