企业级nginx基础、负载、读写分离技术(续一)

  1. 云栖社区>
  2. 博客>
  3. 正文

企业级nginx基础、负载、读写分离技术(续一)

技术小阿哥 2017-11-27 14:25:00 浏览1287
展开阅读全文

五、LNMP环境搭建:(编译安装的nginx,yum安装的php和mysql)

1、取消php相关注释,index.php文件放在/usr/local/nginx/html/目录下。

        location ~ \.php$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html/$fastcgi_script_name;

            include        fastcgi_params;

        }


编辑/etc/nginx/fastcgi_params,并将其修改为如下内容:

[root@localhost ~]# vim /etc/nginx/fastcgi_params


fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径

fastcgi_param QUERY_STRING $query_string;                        #请求的参数;如?app=123

fastcgi_param REQUEST_METHOD $request_method;                    #请求的动作(GET,POST)

fastcgi_param CONTENT_TYPE $content_type;                        #请求头中的Content-Type字段

fastcgi_param CONTENT_LENGTH $content_length;                    #请求头中的Content-length字段。


fastcgi_param SCRIPT_NAME $fastcgi_script_name;                  #脚本名称

fastcgi_param REQUEST_URI $request_uri;                          #请求的地址不带参数

fastcgi_param DOCUMENT_URI $document_uri;                        #与$uri相同。

fastcgi_param DOCUMENT_ROOT $document_root;                      #网站的根目录。在server配置中root指令中指定的值

fastcgi_param SERVER_PROTOCOL $server_protocol;                  #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。


fastcgi_param GATEWAY_INTERFACE CGI/1.1;                         #cgi 版本

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;              #nginx 版本号,可修改、隐藏


fastcgi_param REMOTE_ADDR $remote_addr;                          #客户端IP

fastcgi_param REMOTE_PORT $remote_port;                          #客户端端口

fastcgi_param SERVER_ADDR $server_addr;                          #服务器IP地址

fastcgi_param SERVER_PORT $server_port;                          #服务器端口

fastcgi_param SERVER_NAME $server_name;                          #服务器名,域名在server配置中指定的server_name


#fastcgi_param PATH_INFO $path_info;                             #可自定义变量


#PHP only, required if PHP was built with --enable-force-cgi-redirect

#fastcgi_param REDIRECT_STATUS 200;

~                                        

马哥教程上将要改变次序我这里做实验的时候改变次序会报错,这里一并贴处理备用

屏幕快照 2017-08-29 下午5.14.34.png


六、nginx实现https环境搭建:


[root@localhost ~]# cd /etc/pki/CA/private/

[root@localhost private]# cd ..

[root@localhost CA]# (umask 077; openssl genrsa 2048 >private/cakey.pem)

Generating RSA private key, 2048 bit long modulus

...........+++

................+++

e is 65537 (0x10001)



[root@localhost private]# openssl req -new -x509 -key cakey.pem -out cacret.pem -days 3650

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:bj

State or Province Name (full name) []:huairou

Locality Name (eg, city) [Default City]:huairou

Organization Name (eg, company) [Default Company Ltd]:beijing dongtian

Organizational Unit Name (eg, section) []:beijing dongtian

Common Name (eg, your name or your server's hostname) []:ca.dtedu.org


Email Address []:gongbing@163.com



[root@localhost CA]# touch index.txt

[root@localhost CA]# echo 01 >serial


[root@localhost CA]# mkdir /usr/local/nginx/ssl

[root@localhost CA]# cd /usr/local/nginx/ssl

[root@localhost ssl]# openssl genrsa 1024 >nginx.key

Generating RSA private key, 1024 bit long modulus

...............................................++++++

...................................................................++++++

e is 65537 (0x10001)

[root@localhost ssl]# openssl req -new -key nginx.key -out nginx.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:bj

State or Province Name (full name) []:huairou

Locality Name (eg, city) [Default City]:huairou

Organization Name (eg, company) [Default Company Ltd]:beijing dongtian 

Organizational Unit Name (eg, section) []:beijing dongtian

Common Name (eg, your name or your server's hostname) []:www.dtedu.org

Email Address []:gongbing@163.com


Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:


[root@localhost ssl]# 


如果在进行客户端证书验证签名的时候出现一下错误,需要修改配置文件openssl.cnf。

[root@localhost ssl]# openssl ca -in nginx.csr -out nginx.crt

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

The organizationName field needed to be the same in the

CA certificate (beijing dongtian) and the request (beijing dongtian )

[ policy_match ]

countryName             = match

stateOrProvinceName     = optional

organizationName        = optional

organizationalUnitName  = optional

commonName              = supplied

emailAddress            = optional




[root@localhost ssl]# openssl ca -in nginx.csr -out nginx.crt

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

        Serial Number: 1 (0x1)

        Validity

            Not Before: Aug 29 04:23:40 2017 GMT

            Not After : Aug 29 04:23:40 2018 GMT

        Subject:

            countryName               = bj

            stateOrProvinceName       = huairou

            organizationName          = beijing dongtian 

            organizationalUnitName    = beijing dongtian

            commonName                = www.dtedu.org

            emailAddress              = gongbing@163.com

        X509v3 extensions:

            X509v3 Basic Constraints: 

                CA:FALSE

            Netscape Comment: 

                OpenSSL Generated Certificate

            X509v3 Subject Key Identifier: 

                4A:6B:67:D8:1D:C5:B4:A5:40:57:D4:DF:0A:23:F9:CE:1E:40:54:4D

            X509v3 Authority Key Identifier: 

                keyid:84:94:00:70:93:61:87:4F:49:54:A4:7B:72:CB:29:33:88:A9:E8:E1


Certificate is to be certified until Aug 29 04:23:40 2018 GMT (365 days)

Sign the certificate? [y/n]:y



1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries


Data Base Updated


编辑nginx.conf配置文件,取消注释https相关内容

    server {

         listen       443 ssl;

         server_name  www.dtedu.org;


 #       ssl_certificate      cert.pem;

 #       ssl_certificate_key  cert.key;

         ssl_certificate      /usr/local/nginx/ssl/nginx.crt;

         ssl_certificate_key  /usr/local/nginx/ssl/nginx.key;

         ssl_session_cache    shared:SSL:1m;

         ssl_session_timeout  5m;


         ssl_ciphers  HIGH:!aNULL:!MD5;

         ssl_prefer_server_ciphers  on;


         location / {

            root   html;

            index  index.html index.htm;

        }

    }



}


查看web浏览器启动状态

屏幕快照 2017-08-30 上午8.59.21.png

七、php和nginx分离的方法


1、将nginx监听的地址改成远程php服务器地址

这里注意一点root指定的目录并不是nginx服务器上的目录,而是PHP服务器上的目录,这里指的是相对路径,隐含指/usr/local/nginx目录。

        location ~ \.php$ {

            root           html;

            fastcgi_pass   10.40.0.226:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html/$fastcgi_script_name;

            include        fastcgi_params;

        }

2、php限定特定主机访问,通过php配置文件中的/etc/php/

[root@node6.dtedu.com /usr/local/nginx/html]# vim /etc/php-fpm.d/www.conf 


; Start a new pool named 'www'.

[www]


; The address on which to accept FastCGI requests.

; Valid syntaxes are:

;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on

;                            a specific port;

;   'port'                 - to listen on a TCP socket to all addresses on a

;                            specific port;

;   '/path/to/unix/socket' - to listen on a unix socket.

; Note: This value is mandatory.

listen = 10.40.0.226:9000

; List of ipv4 addresses of FastCGI clients which are allowed to connect.

; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original

; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address

; must be separated by a comma. If this value is left blank, connections will be

; accepted from any ip address.

; Default Value: any


listen.allowed_clients = 10.40.0.227

3、查看防火墙及getenforce策略,避免访问问题。


八、反向代理功能

1、proxy_pass uri将用户请求的uri传递到上游服务器上。

location /name/ {

proxy_pass http://10.40.0.227/remote/;

}


注意:

1、/name/和/remote/,没有要求一定相同

2、如果remote没有指定而只给出域名并且没有跟随“/”,则使用/name/补充。

3、当location 使用正则表达式匹配后面的/name/时,proxy_pass 对应的url不要加后缀/remote/。

详解视频:http://edu.51cto.com//center/course/lesson/index?id=72515

        location / {

            root   html;

            index  index.html index.htm;

            proxy_pass http://10.40.0.227/;


        }


2、proxy_set_header自定义添加的请求首部字段,需要在nginx代理服务器上设置proxy_set_header,然后还要在上游web服务器设置日志记录格式。如果要使用下划线定义字段名,需要underscores_in_headers on;

可以加到http或者server中

        location / {

            root   html;

            index  index.html index.htm;

            proxy_pass http://10.40.0.227/;

            proxy_set_header x-src-addr $remote_addr;


        }


上游httpd服务器:

LogFormat "%{x-src-addr}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined


日志记录信息:

10.40.0.226 - - [29/Aug/2017:20:23:31 +0800] "HEAD / HTTP/1.0" 403 - "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"


10.40.0.55 - - [29/Aug/2017:20:24:00 +0800] "GET /icons/poweredby.png HTTP/1.0" 304 - "http://10.40.0.226/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:54.0) Gecko/20100101 Firefox/54.0"




九、动静分离实现


982895.tmp


其实nginx的动静分离我们在前面已经基本实现了,就是通过location来定义不同的url链接的地址重定向,如果是静态页面就通过proxy_pass进行反向代理。如果是动态页面就通过fastcgi_pass进行转发。

web服务器要实现上传功能,需要开启dav on功能。

<Directory />

    Options FollowSymLinks

    Dav on

   AllowOverride None


</Directory>



十、负载均衡

upstream <name> { 

server <hostname>[:port] [weitht=];

}


events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

upstream statichtml{

     server 10.40.0.229;

     server 10.40.0.227;

}

    sendfile        on;

    keepalive_timeout  65;

    server {

        listen       80;

        server_name  localhost;

        location / {

     proxy_pass http://statichtml;

}

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }


}


upstream模块常用的指令:

keepalive:每个worker进程为发送到upstream服务器的连接所缓存的个数

upstream 支持的负载均衡算法

Nginx的负载均衡模块目前支持4种调度算法,下面进行分别介绍,其中后两项属于第三方调度算法。  

  • 轮询(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。

  • ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。

  • least_conn:最少连接数调度算法。

3.upstream 支持的状态参数

在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:      

  • down,表示当前的server暂时不参与响应客户端请求。

  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回失败proxy_next_upstream 模块定义的错误。

  • fail_timeout,等待目标服务器响应的等待时长,超过认为超时。max_fails可以和fail_timeout一起使用。

     upstream webserver {

ip——hash;

server 10.40.0.227backup max_fails=5 fail_timeout=10s;

server 10.40.0.226;

}


十一、nginx的缓存功能

缓存类型:

静态页面缓存

反向代理缓存

日志缓存

fastcgi缓存


作为缓存服务器,它的性能不如varnish,并且在生产环境中也不会用nginx做缓存服务器使用,而作为反向代理服务器,他的性能又由于squid服务器,它对用户请求采用“异步”方式。

缓存需要考虑的问题:

什么需要缓存

如何保证同一个请求指向相同的缓存服务器

如何保证分类存储缓存,快速查找缓存(键值存储、分级)

键值存在于内存中,并通过分级方式存储在磁盘上的数据,分级采用16进制数字表示。

视频位置:http://edu.51cto.com//center/course/lesson/index?id=72533


扩展模块(第三方模块)

缓存模块

proxy_cache:适用范围在http{ }中。

squid

varnish

proxy_cache:适用范围在http{ }中。

通常比较来看,nginx的缓存功能要优于squid的,squid毕竟是上一代的产品,并且在数据查找和缓存的机制落后于nginx的缓存机制,nginx通过多级目录存储缓存数据,缩小查找访问,提供了缓存效率。

Proxy Cache是Nginx自身实现的一个功能完整,性能不错的缓存机制.Nginx服务启动后, 会生成专门的进程对磁盘上的缓存文件进行扫描, 在内存中建立缓存索引, 提高访问效率, 并且还会生成专门的管理进程对磁盘上的缓存文件进行过期判定/更新等方面的管理. Proxy Cache缓存支持任意连接响应数据的缓存, 不仅限于200状态的数据

nginx作为反向代理时,能够将来自upstream的响应缓存到本地,并在后续的客户端请求同样内容时从本地直接响应。

proxy_cache zone|off:定义一个用于缓存的共享内存空间,其可以被多个地方调用,缓存将遵从upstream服务器的响应报文首部中关于缓存的设定,如:“expires”、“cache-control:no-cache”、“cache-control:max-age=xxx”、“private”、“no-store”等,但nginx在缓存时不会考虑响应报文的“vary”首部,为了确保私有信息不被缓存,所有关于用户的私有信息可以在upstream上通过“no-cache”、“max-age=0”来实现,也可在nginx设定proxy-cache-key必须包含用户特有数据,比如“$cookie-xxx”的方式实现,但最后这种方式在公共缓存中使用有风险。

在响应报文中含有以下首部或指定标志的报文将不会被缓存:

set-cookie

cache-control 包含“no-cache、no-store、private、max-age”后跟0 或非数值

expires

x-accel-expires:0

proxy-cache-key:设定在存储及检索缓存时用于“键”的字符串,可以使用变量为其值,但使用不当会为同一个内容缓存多次的情况。

proxy_cache_lock:启用此项,可以在缓存未命中阻止多个相同的请求同时同时发往upstream,其生效范围为worker级别。

proxy_cache_lock_timeout:前面选项的锁定时长

proxy_cache_min_uses:某响应报文被缓存之前至少被请求的次数

proxy_cache_use_stale:在无法联系到upstream服务器时的那种情况下(error、timeout、http_500等)让nginx使用本地缓存的过期缓存对象直接响应客户端请求。

proxy_cache_valid [code] xxx:用于为不同的响应设定不同时长的有效缓存时长

proxy_cache_methods[get head post]:为哪些请求启用缓存功能

proxy_cache_bypass string:设定哪些情况下,nginx将不从缓存中读取数据

55530322.png.

1.png

1.指令说明 

proxy_cache_path

语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];  
默认值:None  
使用字段:http  
指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中,并且使用代理url的哈希值作为关键字与文件名。levels参数指定缓存的子目录数,例如:

1
proxy_cache_path  /data/nginx/cache  levels=1:2   keys_zone=one:10m;

文件名类似于:

1
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

levels指定目录结构,有效值为1或者2, 例如: “2”, “2:2”, “1:1:2“,但是最多只能是三级目录。  
所有活动的key和元数据存储在共享的内存池中,这个区域用keys_zone参数指定。one指的是共享池的名称,10m指的是共享池的大小。 

 
注意每一个定义的内存池必须是不重复的路径,例如:

1
2
3
proxy_cache_path  /data/nginx/cache/one    levels=1      keys_zone=one:10m;
proxy_cache_path  /data/nginx/cache/two    levels=2:2    keys_zone=two:100m;
proxy_cache_path  /data/nginx/cache/three  levels=1:1:2  keys_zone=three:1000m;

如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。一个名为cache manager的进程控制磁盘的缓存大小,它被用来删除不活动的缓存和控制缓存大小,这些都在max_size参数中定义,当目前缓存的值超出max_size指定的值之后,超过其大小后最少使用数据(LRU替换算法)将被删除。内存池的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定,如FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节。

inactive=time:用于设定非活动缓存数据在内存中保留的最长时间,就是过了keys_zone设定的时间后可以在磁盘上保留的时间,超过就删除了。

max_size=size:用来设定最大缓存空间大小。


proxy_cache

语法:proxy_cache zone_name;  
默认值:None  
使用字段:http, server, location  
设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。  
在0.7.48后,缓存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”头部字段,0.7.66版本以后,”Cache-Control:“private”和”no-store”头同样被遵循。nginx在缓存过程中不会处理”Vary”头,为了确保一些私有数据不被所有的用户看到,后端必须设置 “no-cache”或者”max-age=0”头,或者proxy_cache_key包含用户指定的数据如$cookie_xxx,使用cookie的值作为proxy_cache_key的一部分可以防止缓存私有数据,所以可以在不同的location中分别指定proxy_cache_key的值以便分开私有数据和公有数据。  
缓存指令依赖代理缓冲区(buffers),如果proxy_buffers设置为off,缓存不会生效。


proxy_cache_valid

语法:proxy_cache_valid reply_code [reply_code …] time;  
默认值:None  
使用字段:http, server, location  
为不同的应答设置不同的缓存时间,例如:

1
2
proxy_cache_valid  200 302  10m;
proxy_cache_valid  404      1m;

为应答代码为200和302的设置缓存时间为10分钟,404代码缓存1分钟。  
如果只定义时间:

1
proxy_cache_valid 5m;

那么只对代码为200, 301和302的应答进行缓存。  
同样可以使用any参数任何应答。

proxy_cache_min_uses

某个响应报文被缓存下来至少需要被请求的次数

proxy_cache_use_stale:当缓存服务器无法连接到upstream服务器时,如何使用缓存数据。

实例:

定义缓存及相关属性,并通过add_header来判断缓存是否命中起作用。

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  5;

    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=static:20minactive=24h max_size=20g;//定义缓存名称,位置,时长,存储大小。

    upstream webserver {

server 10.40.0.227;

server 10.40.0.226;

}

    server {

        listen       80;

        server_name  localhost;

        location / {

            root   html;

            index  index.html index.htm;

            proxy_passhttp://webserver;//自定义反向代理上游服务器

    proxy_set_headerHost $host;//自定义响应报文字段名及内容

    proxy_cachestatic;//启动缓存

    proxy_cache_valid202 1d;//为不同的响应码设置缓存时长

    proxy_cache_valid301,302 10m;

    proxy_cache_validany 1m;

    proxy_cache_use_staleerrortimeoutinvalid_headerupdating http_502 http_503 http_504 http_500;//当上游服务器无法响应后的处理办法。

            add_header X_via $server_addr;

            add_header X_Cache_Status $upstream_cache_status;

}

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

十二、nginx和memcache结合


传统上,PHP中使用memcache的方法是使用php-memcachephp-memached扩展操作Memcache,然而在Nginx上有构建更高效缓存机制的方法,传统的缓存策略仍可能造成效率低下,因为传统上是通过PHP操作memcache的,要执行PHP代码,Nginx就必然要和FastCGI通信,同时也要进入PHP的生命周期,因此SAPI、PHP Core和Zend Engine的一系列逻辑会被执行。更糟糕的是,fpm和PHP可能会阻塞,因此破坏了Nginx的非阻塞性。(原文中此处表述有误,fastcgi与nginx进行同步通信,但并不会破坏nginx i/o的非阻塞性,多谢agentzh给予指正)下图展示了在memcache命中时整个处理过程。

参考文献:http://blog.csdn.net/ygm_linux/article/details/53561486

十三、nginx通过fastcgi_cache缓存动态数据

如果说proxy_cache主要用来缓存静态页面的话(先后查询通过proxy_pass来完成),那么fastcgi_cache则主要是缓存动态页面(通过fstcgi_pass来完成动态查询),nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache。

proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态。fastcgi_cache的作用是缓存fastcgi生成的内容,很多情况是php生成的动态的内容。
proxy_cache缓存减少了nginx与后端通信的次数,节省了传输时间和后端宽带。
fastcgi_cache缓存减少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力,这比用memcached之类的缓存要轻松得多。

fastcgi_cache的使用方法和proxy_cache一样,都是需要现在http{ }中声明一个缓存名称,然后在server {}中开启使用它,而这里的开启位置通常是location /.php${ }中。

[root@node6.dtedu.com /usr/local/nginx/html]# vim /etc/nginx/nginx.conf



worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  5;

    fastcgi_cache_path /data/cache/fastcgi levels=1:2:1 keys_zone=fastcgitest:20m max_size=1g;

    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=static:20m  inactive=24h max_size=20g;

    upstream webserver {

        server 10.40.0.227;

        server 10.40.0.229;

        }

    server {

        listen       80;

        server_name  localhost;


        location / {

            root   html;

            index  index.html index.htm;

            proxy_pass  http://webserver;

            proxy_set_header    Host $host;

            proxy_cache static;

            proxy_cache_valid   202 1d;

            proxy_cache_valid   301,302 10m;

            proxy_cache_valid   any 1m;

            proxy_cache_use_stale       error   timeout invalid_header  updating http_502 http_503 http_504 http_500;

            add_header X_via $server_addr;

            add_header X_Cache_Status $upstream_cache_status;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

        location ~ \.php$ {

            root           html;

            fastcgi_pass   10.40.0.227:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html/$fastcgi_script_name;

            fastcgi_cache fastcgitest;

            fastcgi_cache_valid 200 10m;

            fastcgi_cache_key $host$request_uri;

            fastcgi_cache_valid 301 302 2m;

            fastcgi_cache_valid any 1m;

            fastcgi_cache_use_stale error timeout invalid_header updating;

           include        fastcgi_params;

        }

    }

}

、日志缓存

通常情况下,varnish、nginx的缓存日志都是不记录到磁盘上的,而是临时存放在内存中,所以需要设置日志缓存属性。

open_log_file_cache max=xx [inactive=xx] [min_uses=xx] [valid=xx];

open_log_file_cache off

max=定义最大缓冲记录条数

inactive=定义缓存为被访问的时长

min_uses=

valid=缓存数据在被定义为超过inactive时间后可以存在的时间,如果超过这个时间就被删除了

十五、nginx命令行参数

1、-t:测试配置文件正确性

2、-g:设定nginx的全局属性

3、-

nginx平滑升级(升级系统版本)

就是在不关闭nginx的情况下,只关闭master进程,并升级此主进程,即可完成平滑升级。

生产环境使用kill -SIGUIT <master_process_id>关闭主进程。

平滑升级的方法:

1、安装完毕nginx新版本

2、kill -SIGUSER2 <master_process_id>

日志轮换(将旧日志备份出来,再重新写一份到原来的位置)

1、将指定位置的日志复制到其他位置。

2、kill -SIGUSER1 <master_process_id>

nginx第三方模块及文件系统讲解:http://edu.51cto.com//center/course/lesson/index?id=72545

nginx第三方模块下载地址:https://www.nginx.com/resources/wiki/modules/index.html

下一课:负载均衡及varnish缓存服务器




本文转自 blackstome 51CTO博客,原文链接:http://blog.51cto.com/137783/1968806,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小阿哥
+ 关注