注意:所有文章除特别说明外,转载请注明出处.
[TOC]
Nginx
概念
1.正向代理
如果将局域网外的Internet想象成一个巨大的资源库,则局域网内的客户端要访问Internet需要通过代理服务器来访问,这种代理服务就称为正向代理。
2.反向代理
客户端对代理无感知,因为客户端不需要任何配置都可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的代理服务器地址,隐藏了真是服务器IP地址。
3.负载均衡
反向代理服务器将客户端请求平均分担到各个服务器中。
4.动静分离
这里为了加快网站的解析速度,可以将动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
在服务器Tomcat中部署动态资源,然后在专门的静态资源服务器中部署静态资源。
安装配置
1. 安装编译工具和库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
2. 安装PCRE
pcre作用让Nginx支持rewrite功能。
1. wget http://...
2. 解压目录 tar -zxvf pcre...
3. 进入安装包
4. 编译安装 ./configure make && make install
5. 查看pcre版本
3. 安装Nginx
1. 获取资源 wget http://....
2. 解压目录 tar -zxvf nginx..
3. 进入安装目录
4. 编译安装
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35 make && make install
5. 查看版本号
/usr/local/webserver/nginx/sbin/nginx -v
4. Nginx配置
1. 创建Nginx运行使用的用户www
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
2. 配置ngin.conf
3. 检查配置是否正确
/usr/local/webserver/nginx/sbin/nginx -t
4. 启动Nginx
/usr/local/webserver/nginx/sbin/nginx
提示:在上面所有的配置文件配置完成之后,如果在浏览器中访问不了网页,可能是因为Linux的防火墙开着,关闭防火墙便能够访问。在关闭防火墙之后还需要开放端口号才能够访问。
centos7防火墙:
开启:systemctl start firewalld.service
关闭:systemctl stop firewalld.service
重启:systemctl restart firewalld.service
systemctl status firewalld 查看firewalld状态
firewall-cmd --zone=public --add-port=8080/tcp --permanent 开启端口号
sudo firewall-cmd --add-port=8001/tcp --permanent 设置端口号8001
sudo firewall-cmd --add-port=8080/tcp --permanent 设置端口号8080
firewall-cmd --reload 重启防火墙
firewall-cmd --list-all 查看防火墙列表
...
5. Nginx常用命令
提示:在我们使用Nginx操作命令前提条件是我们必须进入Nginx的目录。
1. 查看Nginx版本号
在/sbin/目录下使用 ./nginx -v 命令
2. 启动Nginx
./nginx
3. 关闭Nginx
./nginx -s stop
4. 重新加载Nginx
./nginx -s reload
提示:命令 ps -ef | grep nginx 查看Nginx进程。
配置文件
1. 全局块
配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
从配置文件开始到events之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令。
2. events块
配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
在该块中的配置指令主要影响Nginx服务器与用户的网络连接。
3. HTTP块
可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
该部分是Nginx中配置最为频繁的部分,代理、缓存和日志定义等绝大多数的功能和第三方的模块配置都在这里。
注意:http块也可以包括http全局块、server块。
3.1 http全局块
在http全局配置的指令包括文件引入、mime-type定义、日志自定义、连接超时时间、单链接请求数量上限等。
3.2 server块
配置虚拟主机的相关参数,一个http中可以有多个server。每个server块就相当于一个虚拟主机。
该块和虚拟主机有密切关系,虚拟主机从用户角度看和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个server又可以分为全局server块以及可以同时包括多个location块。
- 全局server块
最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称和IP配置。
- location块
一个server块可以配置多个location块,该块的主要作用是基于Nginx服务器接收到请求字符串,对虚拟主机名称(IP别名)之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,或其它第三方模块的配置。
配置请求的路由,以及各种页面的处理情况
########### 每个指令必须有分号结束。#################
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
上面是nginx的基本配置,需要注意的有以下几点:
1、几个常见配置项:
1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
2.$remote_user :用来记录客户端用户名称;
3.$time_local : 用来记录访问时间与时区;
4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态;成功是200;
6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
7.$http_referer :用来记录从那个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
2、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。
3、每个指令必须有分号结束。
第2章 Nginx反向代理配置
1. 在Windows系统的hosts文件中进行域名和IP对应关系的配置。
2. 在Nginx中进行请求转发的配置(反向代理配置)
3. 访问网站
2.1 Nginx实现反向代理
- 效果
在使用Nginx反向代理,根据访问的路径不同跳转到不同的端口的服务中。
1. Nginx的监听端口为 9001。
2. 访问http://localhost:9001/edu/ 跳转到localhost:8008/
3. 访问http://localhost:9001/vod/ 跳转到localhost:8089/
准备工作
准备两个Tomcat服务器,一个8080端口,一个8081端口。
提示:如果这里配置了两个tomcat但只有一个能访问,并且配置文件server.xml文件中三个端口号没有冲突的情况下,那么可能是配置的端口号没有开放对外访问。此时应该设置设置防火墙的开放端口号。
创建文件夹以及测试文件放到tomcat的目录下。
在tomcat目录的webapps目录下创建将要访问的文件和文件夹。
具体配置
找到Nginx的配置文件,然后在里面做反向代理配置
server {
listen 9001; server_name 192.168.8.122; location ~ /edu/ { proxy_pass: http://127.0.0.1:8080; } location ~ /vod/ { proxy_pass: http://127.0.0.1:8089; }
}
开放对外访问的端口号
查看已经开放端口号
增加开放端口号
测试增加开放端口号是否能访问
提示:如果有些时候在配置好之后还是无法访问,可以重启一下tomcat,可能是之前的配置没有生效,重启之后让之前的配置生效。
配置nginx.conf配置文件的反向代理设置之后,重启Nginx
2.2 Nginx实现负载均衡
- 实现效果
浏览器输入地址http://192.168.8.122/edu/a.html。负载均衡效果,平均分配到8080和8089端口中去。
准备工作
准备两台tomcat服务器,一台8080,一台8089。
在两台tomcat里面webapps目录下创建名称为edu的文件夹,在edu文件夹下创建页面a.html,用于测试。
在Nginx的配置文件中进行负载均衡的配置
2.3 Nginx实现动静分离
准备工作
在Linux中准备静态资源
2.4 Nginx高可用集群
在Linux中配置两个ip
在/etc/sysconfig/network-scripts/目录下修改ifcfg-ens2文件
IPADDR1=…//加入新的ip
重启更新网络服务
systemctl restart network
查看是否配置成功
ip addr
提示:这里使用ipconfig命令查看不了新配置的IP。
高可用,在Nginx宕机的情况下,整个服务还能够正常运行。
1. 在这里配置的时候需要两台Nginx服务器
2. 需要keepalived
3. 需要虚拟IP
准备工作
需要两个服务器
在两台服务器上安装Nginx
在两台服务器上安装keepalived
在两台服务器上使用命令 yum 进行安装
yum install keepalived -y
在安装完成之后,在etc目录里面生成目录keepalived,有文件keepalived.conf
完成高可用配置(主从配置)
修改/etc/keepalived/keepalived.conf配置文件
在/usr/local/src添加检测脚本
启动两台服务器上的Nginx和keepalived
启动Nginx ./nginx
启动keepalived systemctl start keepalived.service
测试
Nginx的原理
多个worker和一个master机制的优势
可以使用 nginx -s reload 命令进行热部署操作
对于每个worker进程来说,独立的进程不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,会方便很多。然后独立进程,进程之间不会相互影响,一个进程结束之后,其它进程还在工作,服务不会中断。
合适数量的worker的数量设置,Nginx与Redis类似,都采用了IO多路复用机制,每个worker都是一个独立的进程,每个进程只有一个主线程,通过异步非阻塞的方式处理请求。所以worker的数量和服务器CPU核心数相等最好。
连接数 worker_connection
1. 发送请求占用了worker的几个连接数(2或者4个)
2. Nginx有1个master和4个worker,每个worker支持最大的连接数为1024,支持最大的并发数是多少?
普通的静态访问最大并发数是:
worker_connections * worker_process / 2
如果是HTTP作为反向代理来说,支持最大并发数量是:
worker_connections * worker_process / 4
第3章 Nginx的基本配置和优化
3.2 Nginx的虚拟主机配置
虚拟主机,将服务器上的主机分成一台台“虚拟”主机,每台虚拟主机都可以是一台独立的网站,同一台服务器的虚拟主机之间是独立的。
提示:Nginx可以配置多种类型的虚拟主机。1.基于IP的虚拟主机。2.基于域名的虚拟主机。3.基于端口的虚拟主机。
3.2.1 基于IP的虚拟主机
http
{
#第一个虚拟主机
server
{
listen ...:..;
server_name ...;
access_log logs/...;
location /
{
#默认首页文件
index index.html index.htm;
#html文件存放的目录
root /data/htdocs/..;
}
}
#第一个虚拟主机
server
{
listen ...:..;
server_name ...;
access_log logs/...;
location /
{
#默认首页文件
index index.html index.htm;
#html文件存放的目录
root /data/htdocs/..;
}
}
...
}
提示:从上面配置文件我们可以得到一段server{}文件表示一个虚拟主机。如果需要配置多段虚拟主机,那么配置多段server{}即可。
注意:如果需要在eth0网卡设备上添加两个IP别名 192.168.8.122 | 192.168.2.132 可以通过 ifconfig | route 命令操作。
3.2.2 配置基于域名的虚拟主机
基于域名的虚拟主机配置最常见的虚拟主机配置,只需要配置DNS服务器,然后将主机名映射到正确的IP地址,然后配置Nginx服务器,令其识别不同的主机名便可。
http
{
#第一个虚拟主机
server
{
#监听的端口
listen 80;
#主机名字
server_name ...;
access_log logs/...;
location /
{
#默认首页文件,顺序从左到右
index index.html index.htm;
#html文件存放的目录
root /data/htdocs/..;
}
}
#第一个虚拟主机
server
{
listen ...:..;
server_name ...;
access_log logs/...;
location /
{
#默认首页文件
index index.html index.htm;
#html文件存放的目录
root /data/htdocs/..;
}
}
...
}
3.3 Nginx日志文件配置与切割
在虚拟主机开始的配置文件中配置的时候,就已经使用了access_log进行了日志记录。这里再说Nginx日志记录,与日志记录的指令包括:log_format用来设置日志的格式。access_log用来设置日志文件的存放路径、格式和缓存大小。
日志文件的切割最常见的就是按照天数切割。具体配置。
3.4 Nginx的压缩输出配置
经过gzip压缩之后页面大小可以变为原来的0.3左右,这样浏览器访问速度将会更快。
3.5 Nginx的自动列目录配置
location / {
autoindex on;
}
3.6 Nginx浏览器本地缓存设置
浏览器缓存可以通过 expires 指令输出 header 头来实现。
expires [time|epoch|off]
第6章 Nginx HTTP负载均衡和反向代理的配置与优化
负载均衡,多台服务器之间协同工作,提高计算机系统处理能力和计算强度,满足当前业务需求。在多个设备之间实现合理业务分配的方法。是多个服务器之间组成一个服务器集合,每台服务器都具有等价的地位,都可以单独的对外提供服务而无需其它服务的辅助。
反向代理,以代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络的服务器,将从服务器上得到的结果返回给Internet上请求的客户端。
6.1 Nginx代理服务设置
1. 设置404页面导向地址
error_page 404 https://...;#错误页
proxy_intercept_errors on; #如果被代理服务器返回的状态码为400或大于400,设置的error_page配置起作用,默认为off
2. 如果我们的代理只允许接受get、post请求方法一种
proxy_method get; #支持客户端的请求方法 post/get
3. 设置支持的HTTP协议版本
proxy_http_version 1.0; #Nginx服务器提供代理服务的HTTP协议版本
4. 解决负载均衡采用轮询方式时,有一台服务器挂掉导致客户端一直等待的问题。
proxy_connect_timeout 1; #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
proxy_read_timeout 1; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
proxy_send_timeout 1; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。
proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off。
5. 如果upstream指令配置了一组服务器作为被代理服务器,服务器中的访问算法遵循配置的负载均衡规则,同时可以使用该指令配置在发生哪些异常情况时,将请求顺序交由下一组服务器处理
proxy_next_upstream timeout; #反向代理upstream中设置的服务器组出现故障时,被代理服务器返回的状态值。
6. 如果需要通过HTTP获取用户的真实ip而非代理ip作设置
proxy_set_header Host $host; #
proxy_set_header X-Real-IP $remote_addr; #将源ip赋值给x-real-ip,这样可以在程序中$X-Real-IP来获取源ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #在Nginx作为代理服务器时,设置的ip列表会将经过的机器ip代理机器ip都记录下来
6.2 Web负载均衡方法
1. 手动选择方式
如我们在网页上下载的时候让我们选择电信1、电信2、连通1、连通2等方式
2. DNS轮询方式
很多域名注册商都对同一主机名添加多条A记录,这就是DNS轮询,DNS将解析请求按照A记录的顺序随机分配到不同的IP上,从而完成了负载均衡。
缺点:
1.可靠性低
2.负载分配不均衡
DNS负载均衡采用的是简单的轮询负载方法,不能区分服务器的差异,不能反映服务器当前的情况。
3. 四/七层负载均衡
1. 四层负载均衡:基于IP+端口的负载均衡,通过虚拟IP+端口接收请求,然后再分配到真实的服务器
主要通过报文中的目标地址和端口,再加上负载均衡设置的服务器选择方式,决定最终的内部服务器。
2. 七层负载均衡:基于URL等应用层信息的负载均衡,通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器
或称为内容交换,主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
3. 二层负载均衡:基于MAC地址,通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址。
4. 三层负载均衡:基于IP地址,通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址。
5. 四到七层负载均衡:表示在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。
1. 负载均衡器通常称为四层交换机或七层交换机
1. 四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。
2. 七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息。
6.2.1 Nginx负载均衡详解
Upstream配置是写一组被代理的服务器地址,然后配置负载均衡的算法,这里被代理的服务器地址有两种写法:
1.
upstream mysvr {
server 192.168.1.12:2050;
server 192.168.1.8:1204;
}
server {
...
location ~*^.+$ {
proxy_pass http://mysvr; #请求转向mysvr定义的服务器列表
}
}
1. 热备:当一台服务器发生事故时,才启用第二台服务器提供服务。
upstream mysvr {
server 127.0.0.1:5252;
server 192.168.10.125:5524 backup; #热备
}
2. 轮询:Nginx默认就是轮询其权重都默认为1,服务器处理在多个之间转换,如果后端服务器down掉,能自动剔除
upstream mysvr {
server 127.0.0.1:2525;
server 192.168.25.25:1245;
}
3. 加权轮询:根据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置则默认是1。权重越大分配到的访问越多。
upstream mysvr {
server 127.0.0.1:2525 weight=1;
server 192.168.52.2 weight=2;
}
4. ip_hash:Nginx会让相同的客户端ip请求相同的服务器(每个访客固定访问一个后端服务器)。
upstream mysvr {
server 127.0.0.1:1245
server 192.168.12.145:1246
ip_hash;
}
5. Nginx负载均衡配置状态参数
1. down 表示当前的server暂时不参与负载均衡
2. backup 预留的备份机器
3. max_fails 允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误
4. fail_timeout 在经理max_fails次失败之后,暂停服务的时间
upstream mysvr {
server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;
}
5. fair 按照服务器的响应时间来分配请求,响应时间短的优先分配
6.3 Nginx负载均衡与反向代理
upstream指令用于设置一组可以在 proxy_pass 和 fastcgi_pass 指令中使用的代理服务器,默认的负载均衡方式为轮询。upstream模块中的server指令用于指定后端服务器的名称和参数,名称可以是ip、域名、端口号后socket。
在server{…}虚拟主机内,通过 proxy_pass 和 fastcgi_pass 指令设置进行反向代理的 upstream 服务器集群。
proxy_set_header指令用于在反向代理的后端web服务器发起请求时添加指定的header头信息。
在后端web服务器有多个 基于域名的虚拟主机 时,要通过添加Header头信息Host,用于指定请求的域名,这样后端web服务器才能识别该反向代理访问请求由哪一个虚拟主机来处理。
在使用反向代理之后,后端web服务器不能通过 $_SERVER["REMOTE_ADDR"] 变量来获取用户的真是ip,获取到的将是Nginx负载均衡服务器的ip。需要添加Nginx反向代理时的头信息 X-Forwarded-For得到真实的ip。
6.3.2 Nginx负载均衡与反向代理实现动、静态网页分离
动、静态分离就是让动态Java等程序网页去访问JavaWeb服务器,让缓存页、图片、JavaScript、CSS、Flash去访问squid等缓存服务器。
通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使得浏览器缓存过期时间,减少与服务器之前的请求和流量。具体的expires定义:给一个资源设置一个过期时间,也就是无需去服务器验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。
6.4 Nginx负载均衡的HTTP upstream模块
upstream提供一个简单方法来实现轮询和客户端ip之间的后端服务器负载均衡,并可以对后端服务器进行健康检查。
6.4.1 ip_hash指令
ip_hash指令能够将客户端ip的请求通过哈希算法定位到同一个后端服务器,也就是说当再访问此ip下的其它URL时,还是会定位到该服务器上。
ip_hash指定无法保证后端服务器的负载均衡。
如果后端服务器有时需要从Nginx负载均衡(已使用ip_hash)中摘除一段时间,需要标记其为down,而不是直接从配置文件中删掉或注释掉该后端服务器的信息。
6.4.2 server指令
该指令用于指定后端服务器的名称和参数,服务器的名称可以是一个域名、ip地址、端口号或者socket。
参数:
1. weight 权重,权重数值越高,被分配到的客户端请求数越多。默认为1
2. max_fails 在fail_timeout指定时间内对后端服务器请求失败的次数。
3. fail_timeout 在经过max_fails次数后,暂停的时间。
4. down 标记服务器永久离线。
5. backup 仅在非backup服务器全部繁忙或死机才启用。
6.4.3 upstream指令
设置一组可以在 proxy_pass 和 fastcgi_pass 指令中使用的代理服务器,默认的负载均衡方式是轮询。
6.5 Nginx负载均衡服务器的双机高可用
在Web服务器集群当做一个城池的话,那么负载均衡服务器相当于城门,城门破了,那么服务就不能正常提供。
双机高可用的方式目前有两种:
一台主服务器加一台从服务器,在主服务器宕机之后,从服务器接管主服务器的虚拟IP继续提供服务
两台负载均衡服务器都处于活动状态,各自绑定一个公网虚拟IP,提供负载均衡服务
第7章 Nginx的rewrite规则
Rewrite主要功能是实现URL的重写,Nginx的rewrite规则采用PCRE。通过rewrite规则,可以实现规范的URL,根据变量来做URL转向及选择配置。
7.2 Nginx Rewrite相关指令
1. break指令
2. if指令,该指令不支持嵌套和多个条件&&和||处理
~ 表区分大小写字母匹配
~* 表示不区分大小写字母匹配
!~ 和!~* 作用相反,表示不匹配
-f 和 !-f 判断文件是否存在
-d 和 !-d 判断目录是否存在
-e 和 !-e 判断文件或目录是否存在
-x 和 !-x 判断文件是否可执行
3. return
4. rewrite指令,该指令根据表达式来重定向URI或者修改字符串
5. set指令,用于定义一个变量并赋值。
第9章 Nginx的Web缓存服务与新浪的开源NCACHE模块
Web缓存服务中,最著名的数Squid。
9.2 Nginx的Web缓存服务
9.2.1 proxy_cache相关指令集
1. proxy_cache 该指令用于设置哪个缓存区将被使用。
2. proxy_cache_path 设置缓存文件的存放路径
该指令只能在http标签内配置
3. proxy_cache_methods 用于设置缓存哪些http方法,默认缓存http get/head方法,不缓存http post方法
4. proxy_cache_min_use 该指令用于设置缓存的最小使用次数,默认1
5. proxy_cache_valid 用于对不同返回状态码URL设置不同缓存时间
6. proxy_cache_key 设置Web缓存的key值
9.2.3 fastcgi_cache相关指令集
1. fastcgi_cache 该指令用于设置哪个缓存区将被使用
2. fastcgi_cache_path 设置缓存文件存放路径
只能在http标签内使用
3. fastcgi_cache_methods 设置缓存哪些http方法,默认http get/head方法,不缓存http post方法
4. fastcgi_cache_min_use 设置缓存的最小使用次数,默认值是1
5. fastcgi_cache_valid 对不同返回状态码的URL设置不同的缓存时间
6. fastcgi_cache_key 设置Web缓存的key值
9.3 基于Nginx的NCACHE缓存-新浪开源
第12章 Nginx的核心模块
Nginx的模块分为核心模块、标准HTTP模块、可选HTTP模块、邮件模块、第三方模块和补丁。
核心模块包括:1.主模块 2.事件模块
12.1 主模块指令
1. daemon 在生产环境不使用daemon | master_process指令,其只用于开发调试
2. env 定义变量集合
3. debug_points 调试器内设置断点
4. error_log 错误日志记录
级别:
main部分:error
http部分:crit
server部分:crit
5. lock_file Nginx可采用异步互斥进行访问控制
6. master_process 开发调试
7. pid pid文件内记录当前Nginx主进程id好
8. ssl_engine 设置首选的ssl引擎
9. user 指定Nginx Worker进程的用户和组,默认的用户名和组名都是nobody。
10. worker_rlimit_core 指定每个Nginx进程的最大core文件大小
11. worker_rlimit_nofile 指定Nginx进程可以打开的最大文件描述符数量
...
12.3 事件模块指令
1. accept_mutex 连接互斥锁进行顺序的accept()调用
2. accept_mutex_delay
第13章 Nginx的标准HTTP模块
HTTP模块在编译Nginx时自动编译进来,除非使用configure命令禁止编译这些模块。
13.1 HTTP核心模块
13.2 HTTP Upstream模块
HTTP Upstream 模块是与反向代理、负载均衡相关的模块,包含ip_hash | server | upstream等指令。
13.3 HTTP Access模块
1. allow 允许指定的ip或ip段地址访问虚拟主机或目录
2. deny 拒绝..
13.4 HTTP Auth Basic模块
该模块采用基于HTTP基本身份验证的用户名和密码登录方式,来保护虚拟主机和目录。
1. auth_basic 指定弹出登录框中提示的名称
13.10 geo模块
geo模块主要负责做全局负载均衡,可以根据不同的客户端ip访问到不同的服务器。