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

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介:

五、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,如需转载请自行联系原作者

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
7月前
|
缓存 前端开发 JavaScript
tomcat核心技术+Nginx性能调优技术
而Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话
128 1
|
7月前
|
缓存 负载均衡 应用服务中间件
高性能网络编程技术 Nginx 的概念与实践
Nginx 是一款高性能、轻量级的Web服务器和反向代理服务器,它在网络编程技术领域中被广泛应用。本文将详细介绍Nginx的概念和实践,包括其核心原理、功能特点、优势和应用场景等方面。同时,还将深入探讨如何使用Nginx进行高性能网络编程,结合实际案例进行分析。
|
27天前
|
负载均衡 应用服务中间件 数据库
Nginx负载过高,加机器就能解决吗?
一个架构难题的剖析:A机器顶不住,加B机器就能解决吗?
37 7
|
6月前
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
3月前
|
负载均衡 前端开发 应用服务中间件
前后端分离技术与NGINX的简单使用
前后端分离技术与NGINX的简单使用
|
2月前
|
缓存 负载均衡 应用服务中间件
解决Nginx常见问题的技术指南
解决Nginx常见问题的技术指南
212 0
|
5月前
|
负载均衡 网络协议 应用服务中间件
Nginx负载配置
Nginx负载配置
85 8
|
6月前
|
缓存 负载均衡 应用服务中间件
技术笔记:Nginx配置详解
技术笔记:Nginx配置详解
38 0
|
6月前
|
负载均衡 前端开发 应用服务中间件
技术好文共享:超详细的Nginx简易教程
技术好文共享:超详细的Nginx简易教程
|
6月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用