Chinaunix首页 | 论坛 | 博客
  • 博客访问: 682732
  • 博文数量: 125
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 962
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-14 10:20
个人简介

我是一只小白兔~

文章分类

全部博文(125)

文章存档

2017年(16)

2016年(108)

2014年(1)

我的朋友

分类: 服务器与存储

2016-03-17 15:23:12

一、Nginx简介
1.UNIX平台下常用的Web服务器有:Nginx、Apache、Lighttpd、
Tomcat、IBM Websphere.
2.Nginx支持最高5W个并发数。得益于它使用了最新的epoll和kqueue
网络I/O模型。
3.Nginx既可做Web服务器,也可做反向代理服务器;

二、Nginx的安装和配置
1.平滑重启Nginx:kill –HUP nginx主进程号
2.Nginx的信号控制
TERM,INT  快速关闭
QUIT   从容关闭
HUP  平滑重启,重新加载配置文件
USR1  重启打开日志文件,在切割日志时用途很大
USR2  平滑升级可执行程序
WINCH  从容关闭工作进程


三、Nginx的基本配置和优化
1.Nginx的配置文件名为:nginx.conf
2.nginx.conf的结构为
……
events
{
……
}
http
{
……
   server
   {
    ……
   }
   server
   {
      ……
   }
……
}
3.在nginx.conf配置虚拟主机的代码:

Nginx可配置多种虚拟主机:基于IP、基于域名、基于端口
4.使用log_format设置日志的格式,使用access_log指定日志文件存放路径。


四、Nginx HTTP负载均衡和反向代理的配置和优化

1.硬件四、七层负载均衡设备:F5

2.软件四层负载均衡:LVS

3.软件七层负载均衡:Nginx、HAProxy
大多基于HTTP 反向代理方式。Nginx反向代理负载均衡可很好的支持虚拟主机,可配置性强。
可按照轮询、IP_hash、URL_hash、权重多种方式对后台做负载均衡,同时可支持后台服务器健康检查。

4.upstream指令用于设置一组可以在proxy_pass和fastcgi_pass指令中使用的代理服务器,默认的负载均衡方式为轮询。Upstream模块中的Server指令用于指定后端服务器的名称和参数,服务器的名称可以是一个域名、一个IP地址、端口号或UNIX Socket。而在server{…}虚拟主机内,可以通过proxy_pass和fastcgi_pass指令设置进行反向代理的upstream服务器集群。
Proxy_set_header指令用于在向反向代理的后端Web服务器发起请求时添加指定的Header头信息。当后端Web服务器上有多个基于域名的虚拟主机时,要通过添加Header头信息host,用于指定请求的域名,这样后端Web服务器才能识别该反向代理访问请求由哪一个虚拟主机来处理。

weight=number,设置服务器权重,权重数值越高,分配到客户端的请求数越多,默认权重为1.
max_fails=number,在参数fail_timeout指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生错            误,则标记为失败,不设置默认为1.设置为0表示关闭。
file_timeout=TIME,在经历参数max_fails设置的失败的次数后,暂停的时间。
down,标记服务器为永久离线状态。

5.upstream的相关变量
  $upstream_addr:处理请求upstream服务器的地址
  $upstream_status: upstream的应答状态;
  $upstream_response_time: upstream服务器响应时间(ms),多个响应以逗号和冒号分隔;
  $upstream_http_$HEADER:任意的http协议头信息,
例如:$upstream_http_host

6.双机高可用
方法1:一台主服务器加一台热备服务器,正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空      闲状态;当主服务器发生故障时,热备服务器接管主服务器的虚拟IP,提供负载均衡;
方法2:两台服务器均处于活动状态,每个服务器绑定一个公网虚拟IP,当其中一个发生故障时,另一个接管发生故障的
    虚拟IP;

五、Nginx的Rewrite规则和实例

1.Rewrite就是实现URL的重写;

2.Nginx Rewrite规则相关指令有:if、rewrite、set、return、break;
(1)break指令
作用:完成当前的规则集,不再处理rewrite指令;
使用环境:server、location、if
(2)if指令
语法:if(conditin){…}
使用环境:server、location
作用:用于检查一个条件是否符合,如果符合,执行大括号的指令;
if指令不支持嵌套,不支持多个条件&&和||处理;


(3)return指令
语法:return code
默认值:none
使用环境:sever、location、if
作用:用于结束规则的执行并返回状态码给客户端。状态码值:
204、400、402~406、408、410、411、413、416及500~504.


(4)rewrite指令
语法:rewrite regex replacement flag
默认值:none
使用环境:server、location、if
作用:重定向URL,或修改字符串;指令根据配置文件的顺序执行;重写表达式只对相对路径有效;flag支持的标记:
?last-----------表示完成rewrite
?break----------本条规则完成匹配后,不再进行匹配
?redirect-------返回302临时重定向,浏览器显示跳转后的URL地址
?permanent------返回301永久重定向,浏览器显示跳转后的URL地址


注意:使用alias指令时必须用last标记,使用proxy_pass用break标记。

(5)set指令
语法:set variable value
默认值:none
使用环境:server、location、if
作用:用于定义一个变量,并给变量赋值。
例如:set $variname ‘hello’

(6)uninitialized_variable_warn指令
语法:uninitialized_variable_warn on|off
默认值:on
使用环境:http、server、location、if
作用:用于开启或关闭关于未初始化变量的警告信息;

3.Nginx Rewrite可用到的全局变量
$args、$content_length、$content_type、$document_root
$document_uri、$host、$htttp_user_agent、$http_cookie、$limit_rate、$request_body_file、$request_method、
$remote_addr、$remote_port、$remote_user、$request_filename
$request_uri、$query_string、$scheme、$server_protocol
$server_addr、$server_port、$server_name、$uri

六、Nginx模块开发
1.Nginx的配置文件分为4部分:main(全局配置)、server(虚拟主机配置)、upstream(主要是反向代理、负载均衡配置)和location(目录匹配配置)。

2.main指令会影响其他所有部分;location部分会继承server部分的指令,server部分会继承main的指令;upstream既不继承也不影响其他部分;

3.Nginx模块有3种角色:
(1)Handlers(处理模块):用于处理HTTP请求并输出内容;
(2)Filters(过滤模块):用于过滤handler输出的内容;
(3)Load-Balancers(负载均衡模块):

4.Nginx模块的处理流程


七、Nginx的Web缓存服务

1.Web缓存服务器,介于内容源服务器和客户之间。
常用的Web缓存服务器有Squid.

2.Proxy_cache相关指令集

(1)proxy_cache指令
语法:proxy_cache zone_name
默认值:none
使用环境:server、location、http
作用:设置哪个缓存区将被使用,zone_name为创建的缓存区名称;

(2)proxy_cache_path指令
语法:proxy_cache_path path [levels=number] key_zone=zone_name:zone_size [inactive=time] [max_size=size];
使用环境:http
作用:设置缓存文件存放路径

(3)proxy_cache_methods
语法:proxy_cache_methods[GET HEAD POST]
默认值:proxy_cache_methods GET HEAD
使用环境:http、server、location
作用:设置缓存哪些HTTP方法

(4)proxy_cache_min_uses指令
语法:proxy_cache_min_uses the_number
默认值:proxy_cache_min_uses 1
使用环境:http、server、location

(5)proxy_cache_valid指令
语法:proxy_cache_valid reply_code [reply_code…] time
默认值:none
使用环境:http、server、location
作用:用于对不同状态码的URL设置不同的缓存时间。

(6)proxy_cache_key指令
语法:proxy_cache_key line
默认值:none
使用环境:http、server、location
作用:设置Web缓存的key值,Nginx根据MD5哈希存储缓存。


八、Nginx的核心模块
1.Nginx的模块分为:核心模块、标准HTTP模块、可选HTTP模块、邮件模块、第三方模块和补丁。
2.核心模块包括主模块和事件模块。
3.主模块的指令
(1)Daemon指令
语法:daemon on|off
默认值:on
注意:生产环境中不要使用daemon和master_process指令,这些选项仅用于开发调试。

(2)env指令
语法:env VAR|VAR=VALUE
默认值:TZ
使用环境main.
作用:用于定义变量集合,以下场合需更改环境变量或添加新的环境变量:
?在零停机情况下平滑升级Nginx时;
?启用Nginx内置Perl模块时使用;
?被Nginx进程所使用;

(3)debug_points指令 
语法:debug_poins[stop|abort]
默认值:none
作用:用于调试,在调试器内设置断点。

(4)error_log指令
语法:error_log file [debug|info|notice|warn|error|crit]
默认值:${prefix}/logs/error.log
作用:file参数用来指定记录Nginx及FASTCGI错误日志的文件路径。错误日志记录了服务器运行期间遇到的各种错误,以及普通的诊断信息。
debug级别最低,记录的错误日志最多;crit级别最高,只记录严重的错误。
日志中默认的错误级别:
Main部分:eror
HTTP部分:crit
Server:crit

(5)log_not_found指令
语法:log_not_found on|off
默认值:on
使用环境:debug_points stop
作用:启用或禁止404错误日志。该指令用来记录找不到robots.txt和favicon.ico这类文件的错误信息。

(6)include指令
语法:include file|*
作用:使用该指令,可以包含任何你想要包含的配置文件,且支持文件名匹配。

(7)lock_file指令
语法:lock_file file
默认值:compile-time option
示例:lock_file file

(8)master_process指令
语法:master_process on|off
默认值:on
生产环境不可用,仅用于开发调试。

(9)pid指令
语法:pid file
默认值:compile_time option
示例:pid /var/log/nginx.pid;
作用:记录当前Nginx主进程号的pid.可以通过kill命令发送信号给该ID号。

(10)ssl_engine指令
语法:ssl_engine engine
默认:系统默认依赖的引擎。
作用:可设置首选的SSL引擎。可通过命令行工具openssl engine –t来找出目前系统支持的SSL引擎。

(11)timer_resolution指令
语法:timer_resolution –t
默认值:none
示例:timer_resolution 100ms
作用:该指令可减少gettimeofday()函数获取当前时间的系统调用次数。

(12)try_files指令
语法:try_files path1 [path2] uri
默认值:none
作用:该指令可按照参数顺序检查文件是否存在,以及返回第一个被找到的文件名。以“/”结尾的表示一个目录。如果文件没有找到,将被内部重定向到最后一个参数上。最后一个参数是后备的uri,它必须存在,否则报内部错误。

(13)user指令
语法:user user [group]
默认值:nobody nobody
作用:用于指定运行Nginx worker进程的用户和组,默认的用户和组名都是nobody,如果没有组名设定,Nginx则默认组名与用户名相同。

(14)worker_cpu_affinity指令
语法:user user [group]
默认值:nobody nobody
作用:使用该指令可以为每个Nginx worker进程绑定指定的一个CPU。
Nginx采用sched_setaffinity()函数绑定CPU.


(15)worker_priority指令
语法:worker_priority [-] number
默认值:on
作用:可以为所有的worker进程分配优先值。

(16)worker_process指令
语法:worker_process number
默认值:1

(17)worker_rlimit_core指令
语法:worker_processes number
作用:用于指定每个Nginx进程的最大core文件大小。

(18)worker_rlimit_nofile指令
语法:worker_rlimit_nofile limit
示例:worker_rlimit_nofile 65535
作用:用于指定Nginx进程可以打开的最大文件描述符数量。

(19)worker_rlimit_sigpending指令
语法:worker_rlimit_sigpending  limit
示例:worker_rlimit_sigpending 32768
作用:用于指定调用进程的真正用户ID的排队数量。

(20)working_diretory指令
语法:working_diretory path
默认值:--prefix
作用:用于指定Nginx的工作目录,path参数只能使用绝对路径。该指令的默认值为Nginx使用configure文件编译安装时,参数
—prefix==PATH指定的路径。 
  
4.主模块变量
$nginx_version:当前运行的Nginx版本号
$pid:进程ID号
$realpath_root:Root目录绝对路径。
5.事件模块指令
Nginx的事件模块是控制Nginx处理访问连接的指令集。事件模块也写在配置
文件的最上方的区域。
(1)accept_mutex指令
语法:accept_mutex [on|off]
默认值:on
作用:Nginx使用连接互斥锁进行顺序的accept()系统调用。
(2)accept_mutex_delay指令
语法:accept_mutex_delay Nms
默认:500ms
作用:如果一个工作进程没有互斥锁,它将在最少N毫秒延迟之后再次尝试获取互斥锁。默认的延迟时间是500ms。
(3)debug_connection指令
语法:debug_connection [ip|CIDR]
默认值:none
作用:用于记录IP、网络的用户端侦错日志。
(4)use指令
语法:use [kqueue|rtsig|epoll|/dev/null|select|poll|eventport]
(5)worker_connections指令
语法:worker_connections number
作用:用于设置每个工作进程能够处理的连接数。



九、Nginx的标准HTTP模块
1.HTTP核心模块
(1)alias指令
语法:alias file-path|directory-path
默认:no
使用环境:location
作用:用于在URL和文件系统路径之间实现映射。它与root指令类似,但是网页文件的root根目录不会改变,改变的只是请求URL的文件系统路径。
示例:


(2)client_body_in_file_only指令
语法:client_body_in_file_only on|off
默认值:off
使用环境:http、server、location
作用:允许将一个客户端的请求内容记录到一个文件中,该文件在请求完成后不会被删除.

(3)client_body_in_single_buffer指令
语法:client_body_in_single_buffer
默认值:off
使用环境:http、server、location
作用:指定是否保持整个内容在一个单一的客户端请求缓冲区中。
(4)
  
2.
阅读(2604) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~