“Nginx高性能Web服务器详解笔记”的版本间的差异

来自Alex's wiki
跳转至: 导航搜索
7.3.3Proxy Cache的配置的12个指令
7.3.3Proxy Cache的配置的12个指令
第182行: 第182行:
 
[http://blog.51yip.com/apachenginx/1018.html nginx利用proxy_cache来缓存文件(这里有一个完整的nginx配置文件)]<br />
 
[http://blog.51yip.com/apachenginx/1018.html nginx利用proxy_cache来缓存文件(这里有一个完整的nginx配置文件)]<br />
 
<source lang= c>
 
<source lang= c>
user  zhangy users;
+
user  zhangy users;
worker_processes 10;
+
worker_processes 10;
error_log  /var/vlogs/nginx_error.log  crit;
+
error_log  /var/vlogs/nginx_error.log  crit;
pid        /var/vlogs/nginx.pid;
+
pid        /var/vlogs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
+
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
+
worker_rlimit_nofile 65535;
events
+
events
{
+
{
  use epoll;
+
  use epoll;
  worker_connections 65535;
+
  worker_connections 65535;
}
+
}
http
+
http
{
+
{
  include      mime.types;
+
  include       mime.types;
  default_type  application/octet-stream;
+
  default_type  application/octet-stream;
  #charset  gb2312;
+
  #charset  gb2312;
  server_names_hash_bucket_size 128;
+
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
+
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
+
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
+
  client_max_body_size 8m;
  sendfile on;
+
  sendfile on;
  tcp_nopush    on;
+
  tcp_nopush     on;
  keepalive_timeout 60;
+
  keepalive_timeout 60;
 
+
tcp_nodelay on; 
+
 
+
fastcgi_connect_timeout 300; 
+
fastcgi_send_timeout 300; 
+
fastcgi_read_timeout 300; 
+
fastcgi_buffer_size 64k; 
+
fastcgi_buffers 4 64k; 
+
fastcgi_busy_buffers_size 128k; 
+
fastcgi_temp_file_write_size 128k; 
+
//============ 
+
client_body_buffer_size  512k; 
+
proxy_connect_timeout    5; 
+
proxy_read_timeout      60; 
+
proxy_send_timeout      5; 
+
proxy_buffer_size        16k; 
+
proxy_buffers            4 64k; 
+
proxy_busy_buffers_size 128k; 
+
proxy_temp_file_write_size 128k; 
+
proxy_temp_path  /usr/local/nginx/proxy_temp; 
+
/*levels设置目录层次
+
keys_zone设置缓存名字和共享内存大小
+
inactive在指定时间内没人访问则被删除在这里是1天
+
max_size最大缓存空间*/ 
+
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=content:20m inactive=1d max_size=100m; 
+
//============等号中间要加的,关键只要加上proxy_cache_path 
+
 
+
gzip on; 
+
gzip_min_length  1k; 
+
gzip_buffers    4 16k; 
+
gzip_http_version 1.0; 
+
gzip_comp_level 2; 
+
gzip_types      text/plain application/x-javascript text/css application/xml; 
+
gzip_vary on; 
+
 
+
upstream myselfxtajmd { 
+
server 127.0.0.1:10002; 
+
server 127.0.0.1:10001 weight=5; 
+
+
 
+
server 
+
+
listen      10000; 
+
server_name  localhost; 
+
index index.html index.htm index.php; 
+
log_format  access  '$remote_addr - $remote_user [$time_local] "$request" ' 
+
'$status $body_bytes_sent "$http_referer" ' 
+
'"$http_user_agent" $http_x_forwarded_for'; 
+
access_log  /var/log/test.log  access; 
+
 
+
location / 
+
+
proxy_cache content; //根keys_zone后的内容对应 
+
proxy_cache_valid  200 304 301 302 10d;  //哪些状态缓存多长时间 
+
proxy_cache_valid  any 1d;    //其他的缓存多长时间 
+
proxy_cache_key $host$uri$is_args$args;  //通过key来hash,定义KEY的值 
+
 
+
proxy_pass http://myselfxtajmd; 
+
proxy_redirect                      off; 
+
proxy_set_header  Host            $host; 
+
proxy_set_header  X-Real-IP        $remote_addr; 
+
proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for; 
+
+
 
+
//动态的放过 
+
location ~ .*\.(php|jsp|cgi)?$ 
+
+
proxy_set_header Host  $host; 
+
proxy_set_header X-Forwarded-For  $remote_addr; 
+
proxy_pass http://myselfxtajmd; 
+
+
+
+
  
 +
tcp_nodelay on;
 +
 +
fastcgi_connect_timeout 300;
 +
fastcgi_send_timeout 300;
 +
fastcgi_read_timeout 300;
 +
fastcgi_buffer_size 64k;
 +
fastcgi_buffers 4 64k;
 +
fastcgi_busy_buffers_size 128k;
 +
fastcgi_temp_file_write_size 128k;
 +
//============
 +
client_body_buffer_size  512k;
 +
proxy_connect_timeout    5;
 +
proxy_read_timeout       60;
 +
proxy_send_timeout       5;
 +
proxy_buffer_size        16k;
 +
proxy_buffers            4 64k;
 +
proxy_busy_buffers_size 128k;
 +
proxy_temp_file_write_size 128k;
 +
proxy_temp_path   /usr/local/nginx/proxy_temp;
 +
/*levels设置目录层次
 +
keys_zone设置缓存名字和共享内存大小
 +
inactive在指定时间内没人访问则被删除在这里是1天
 +
max_size最大缓存空间*/
 +
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=content:20m inactive=1d max_size=100m;
 +
//============等号中间要加的,关键只要加上proxy_cache_path
 +
 +
gzip on;
 +
gzip_min_length  1k;
 +
gzip_buffers     4 16k;
 +
gzip_http_version 1.0;
 +
gzip_comp_level 2;
 +
gzip_types       text/plain application/x-javascript text/css application/xml;
 +
gzip_vary on;
 +
 +
upstream myselfxtajmd {
 +
server 127.0.0.1:10002;
 +
server 127.0.0.1:10001 weight=5;
 +
}
 +
 +
server
 +
{
 +
listen       10000;
 +
server_name  localhost;
 +
index index.html index.htm index.php;
 +
log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
 +
'$status $body_bytes_sent "$http_referer" '
 +
'"$http_user_agent" $http_x_forwarded_for';
 +
access_log  /var/log/test.log  access;
 +
 +
location /
 +
{
 +
proxy_cache content; //根keys_zone后的内容对应
 +
proxy_cache_valid  200 304 301 302 10d;   //哪些状态缓存多长时间
 +
proxy_cache_valid  any 1d;    //其他的缓存多长时间
 +
proxy_cache_key $host$uri$is_args$args;   //通过key来hash,定义KEY的值
 +
 +
proxy_pass http://myselfxtajmd;
 +
proxy_redirect                      off;
 +
proxy_set_header   Host             $host;
 +
proxy_set_header   X-Real-IP        $remote_addr;
 +
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 +
}
 +
 +
//动态的放过
 +
location ~ .*\.(php|jsp|cgi)?$
 +
{
 +
proxy_set_header Host  $host;
 +
proxy_set_header X-Forwarded-For  $remote_addr;
 +
proxy_pass http://myselfxtajmd;
 +
}
 +
}
 +
}
 
</source>
 
</source>

2016年10月18日 (二) 09:02的版本

第四章 Nginx服务器的高级配置

NGINX高性能Web服务器详解(读书笔记)

4.1针对IPv4内核的7个参数优化配置

参考:高并发情况下Linux服务器内核配置

相应的配置文件在 /etc/sysctl.conf
使用 #/sbin/sysctl -p 命令使修改生效:

#添加:
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4. tcp_synack_retries = 1
net.ipv4. tcp_syn_retries = 1
#修改
net.ipv4.tcp_max_syn_backlog = 262144


4.2针对CPU的Nginx配置优化的2个指令

worker_processes 设置成内核的倍数。针对2核CPU,建议为2或4
worker_processes 4;
worker_cpu_affinity 若是4核CPU,则:
worker_cpu_affinity 0001 0010 0100 1000;

4.3与网络连接相关的4个指令

keepallive_timeout
如:keepalive_time 60 50;
send_timeout
如:send_timeout 10s; 如果这个时间之后客户端没有任何活动,Nginx服务器会关闭
client_header_buffer_size
如果发现 400 错误,有很大一部分原因是客户端的请求头部过大造成的
client_header_buffer_size 32k;
multi_accept
配置Nginx尽可能多的接收客户端的连接请求: multi_accept on;

4.4与事件驱动相关的8个指令

(1)use指令
use epoll;
(2)worker_connections指令
每个Worker允许最大同时连接数。 worker_connections 51200;
由此可知,服务器最大连接数为: Client = worker_processes * worker_connections / 2
同时可以设置进程可以打开最大文件句柄数量: #echo "2390251" > /proc/sys/fs/file-max; sysctl -p
(3)worker_rlimit_sigpending指令
worker_rlimit_sigpending 1024;
用于设置Linux 2.6.6版本之后Linux平台的事件信号队列长度上限。它主要影响事件驱动模型中rtsig模型可以保存的最大信号数。
(4)devpoll_changes和devpoll_events指令
用于设置在/dev/poll事件驱动模型下Nginx服务器可以与内核之间传递事件的数量。前者设置传递给内核的事件数量,后者设置从内核获取的事件数量。默认值为32
(5)kqueue_changes和kquue_events指令
用于设置在kqueue事件驱动模型下Nginx服务器可以与内核之间传递事件的数量。前者设置传递给内核的事件数量,
后者设置从内核获取的事件数量。默认值为512.
(6)epoll_events指令
用于设置在epoll事件驱动模型下Nginx服务器可以与内核之间传递事件的数量。默认值为512.
注意:与其他事件驱动模型不同,epoll模型下Nginx服务器向内核传递事件的数量和从内核获取的事件数量是相等的。所以,
不存在epoll_changes指令。
(7)rtsig_signo指令
用于设置rtsig模式使用的2个信号中的第一个,第二个信号是在第一个信号的编号上加1.默认的第一个信号设置为:
SIGRTMIN+10
(8)rtsig_overflow_*指令
该指令有3个具体的指令,rtsig_over_events、rtsig_over_test、rtsig_over_threshold指令。这些指令用来控制当rtsig模式中信号队列溢出时Nginx服务器的处理方式。
rtsig_over_events:指定队列溢出时使用poll库处理的事件数,默认值为16.
tsig_over_test:指定poll库处理完第几件事后将清空rtsig模型使用的信号队列,默认值为32.
tsig_over_threshold:指定rtsig模式使用的信号队列中的事件超过多少时就需要清空队列了。该指令只对Linux 2.4.x以下版本有效。

第五章 Nginx服务器的Gzip压缩

5.1由ngx_http_gzip_module模块处理的9个指令

(1)gzip 指令
gzip on | off; 默认为off,只有该指令设置为on时,下列各指令设置才有效。
(2)gzip_buffers 指令
gzip_buffers 32 4k | 16 8k; 默认情况下 number * size的值为128,其中size为系统一页的大小。为4KB或8KB
(3)gzip_comp_level 指令
设置压缩程度,从1到9。1表示压缩程度最低(这也是默认设置),压缩效率最高
(4)gzip_disable 指令
语法为 gzip_disable regex ...; 如: gzip_disable MSIE [1-6]\.;
(5)gzip_http_version 指令
默认为1.1
(6)gzip_min_len 指令
超过该值时启用压缩。默认为20,太小了,建议设置为: gzip_min_len 1024;
(7)gzip_proxied 指令
gzip_proxied expired no-cache no-store private auth;
(8)gzip_types 指令
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
(9)gzip_vary 指令
该指令用于在使用Gzip时是否发送带有“Vary: Accept-Encoding”头域的响应头部。这个头域通知客户端浏览器使用了Gzip压缩(P82)。标头“Vary:Accept-Encoding”指定方法及其重要性分析
示例 gzip_vary on;
注意:该指令在使用时会存在BUG,会导致IE4以上的浏览器的数据缓存功能失效。

以下是百度示例:

VaryAcceptEncoding百度示例

两核CPU/4G内存的配置示例:

       gzip on;
       gzip_min_length  1k;
       gzip_buffers     4 16k;
       gzip_http_version 1.1;
       gzip_comp_level 2;
       gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
       gzip_vary on;
       gzip_proxied   expired no-cache no-store private auth;
       gzip_disable   "MSIE [1-6]\.";

5.2由ngx_http_gzip_static_module (可选)模块处理的指令

注意:要想使用必须在Nginx程序配置时使用 --with-http_gzip_static_module指令
该模块负责经过Gzip预压缩的数据.
其中 gzip_static用于开启或关闭该指令: gzip_static on | off | always; 需要注意的是gzip_proxied只支持以下设置: gzip_proxied expired no-cache no-store private auth;

5.3由ngx_http_gunzip_module (可选)模块处理的2个指令

注意:要想使用必须在Nginx程序配置时使用 --with-ngx_http_gunzip_module指令
需要解压的数据可能来自后端服务器或Nginx服务器预压缩产生。

(1)gunzip指令
当开启时,如果客户端浏览器不支持Gzip处理,Nginx服务器将返回解压后的数据;如果客户端支持Gzip,Nginx则忽略该设置。
gunzip_static on | off ;
(2)gunzip_buffers指令
用法与 gzip_buffers类似。

第7章 Nginx 服务器的代理服务

Nginx搭建反向代理服务器过程详解
利用nginx的proxy_next_upstream实现线路容灾
Nginx 负载均衡模块 ngx_http_upstream_module 详述

7.3.1反向代理基本设置的21个命令

(1)proxy_pass命令
upstream proxy_svrs
{
    server http://182.168.1.1:8001/uri/;
    server http://182.168.1.2:8001/uri/;
    server http://182.168.1.3:8001/uri/;
}
 
server
{
    ......
    listen 80;
    server_name www.myweb.home;
    location /
    {
        proxy_pass proxy_svrs;
    }
}

在不指明http://协议的情况下

upstream proxy_svrs
{
    server 182.168.1.1:8001/uri/;
    server 182.168.1.2:8001/uri/;
    server 182.168.1.3:8001/uri/;
}
 
server
{
    ......
    listen 80;
    server_name www.myweb.home;
    location /
    {
        proxy_pass http://proxy_svrs;
    }
}
(6)proxy_set_header命令
语法 proxy_set_header field value;
    #默认情况下该指令设置为:
    proxy_set_header Host $proxy_host;
    proxy_set_header Connect close;
 
    #一些实例:
    proxy_set_header Host $http_host;     #将Host头域的值填充�成客户端的地址。
    proxy_set_header Host $host;             #将location块的server_name指令值填充到Host头域。
    proxy_set_header Host $host:$proxy_port;             #将location块的server_name指令值和listener指令值一起填充到Host头域。

7.3.2Proxy Buffer的配置的7个命令

nginx proxy buffer 解释

proxy_buffer_size 4k;
 
proxy_buffering on;
proxy_buffers 4 4k;
proxy_busy_buffers_size 8k;
proxy_max_temp_file_size 1024m;

nginx proxy_buffers相关配置解释


proxy_buffer_size、proxy_buffers、proxy_busy_buffer_size等,它们都是针对每一个请求起作用的,而不是全局概念。

(1)proxy_buffering
是否启用或关闭ProxyBuffer。语法为: proxy_buffering on | off ;
开启或关闭ProxyBuffer还可以通过在HTTP响应头部的“X-Accel-Buffering”头域设置“yes”或“no”来实现
(2)proxy_buffers指令
配置接收一次被代理服务器响应数据的ProxyBuffer个数和每个Buffer的大小。 proxy_buffers 8 4k | 8k;
(3)proxy_buffer_size指令
配置从被代理服务器获取第一部分响应数据的大小,默认不4k或8k proxy_buffer_size 4k | 8k;
(4)proxy_busy_buffers_size指令
限制同时处于BUSY状态的ProxyBuffer的总大小。默认为8KB或16KB proxy_buffer_size size;
(5)proxy_temp_path指令
示例 proxy_temp_path /nginx/proxy_web/spool/proxy_temp 1 2;
(6)proxy_max_temp_file_size指令
默认1024M
(7)proxy_temp_file_write_size指令
配置同时写入临时文件的大小。一般与平台内存页大小相同

7.3.3Proxy Cache的配置的12个指令

nginx利用proxy_cache来缓存文件(这里有一个完整的nginx配置文件)

user  zhangy users;
worker_processes 10;
error_log  /var/vlogs/nginx_error.log  crit;
pid        /var/vlogs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
 use epoll;
 worker_connections 65535;
}
http
{
 include       mime.types;
 default_type  application/octet-stream;
 #charset  gb2312;
 server_names_hash_bucket_size 128;
 client_header_buffer_size 32k;
 large_client_header_buffers 4 32k;
 client_max_body_size 8m;
 sendfile on;
 tcp_nopush     on;
 keepalive_timeout 60;
 
 tcp_nodelay on;
 
 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 fastcgi_buffer_size 64k;
 fastcgi_buffers 4 64k;
 fastcgi_busy_buffers_size 128k;
 fastcgi_temp_file_write_size 128k;
//============
 client_body_buffer_size  512k;
 proxy_connect_timeout    5;
 proxy_read_timeout       60;
 proxy_send_timeout       5;
 proxy_buffer_size        16k;
 proxy_buffers            4 64k;
 proxy_busy_buffers_size 128k;
 proxy_temp_file_write_size 128k;
 proxy_temp_path   /usr/local/nginx/proxy_temp;
/*levels设置目录层次
keys_zone设置缓存名字和共享内存大小
inactive在指定时间内没人访问则被删除在这里是1天
max_size最大缓存空间*/
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=content:20m inactive=1d max_size=100m;
//============等号中间要加的,关键只要加上proxy_cache_path
 
 gzip on;
 gzip_min_length  1k;
 gzip_buffers     4 16k;
 gzip_http_version 1.0;
 gzip_comp_level 2;
 gzip_types       text/plain application/x-javascript text/css application/xml;
 gzip_vary on;
 
 upstream myselfxtajmd {
 server 127.0.0.1:10002;
 server 127.0.0.1:10001 weight=5;
 }
 
 server
 {
 listen       10000;
 server_name  localhost;
 index index.html index.htm index.php;
 log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" $http_x_forwarded_for';
 access_log  /var/log/test.log  access;
 
 location /
 {
 proxy_cache content; //根keys_zone后的内容对应
 proxy_cache_valid  200 304 301 302 10d;   //哪些状态缓存多长时间
 proxy_cache_valid  any 1d;    //其他的缓存多长时间
 proxy_cache_key $host$uri$is_args$args;   //通过key来hash,定义KEY的值
 
 proxy_pass http://myselfxtajmd;
 proxy_redirect                      off;
 proxy_set_header   Host             $host;
 proxy_set_header   X-Real-IP        $remote_addr;
 proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 }
 
//动态的放过
 location ~ .*\.(php|jsp|cgi)?$
 {
 proxy_set_header Host  $host;
 proxy_set_header X-Forwarded-For  $remote_addr;
 proxy_pass http://myselfxtajmd;
 }
 }
}