- 基本Http服务,可以作为Http代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL
- 高级Http服务,可以进行自定义配置,支持虚拟主机,支持URL重定向,支持网络监控,支持流媒体传输等
- 邮件代理服务器,支持IMAP/POP3代理服务功能,支持内部SMTP代理服务功能
FastCGI(通用网关接口)
服务的缓存机制gzip压缩 ranges支持 chunked响应 XSLT SSI 图像缩放
针对包含多个SSI的页面,经由反向代理SSI过滤器可并行处理PUT DELETE MKCOL COPY MOVE
方法FLV
流和MP4
流传输perl
语言IMAP
认证方式和POP3
认证方式STARTTLS
请求稳定,后端转发与业务配合分离,配置灵活,支持判断表达式
提高网络系统的处理能力
内置策略
:轮询
加权轮询
IP HASH
扩展策略
主要通过第三方模块实现,常见有url hash
Proxy_Cache
(提供代理服务时,对后端服务器返回内容进行URL缓存) 和FastCGI_Cache
(对FastCGI程序缓存)指令集构成./configure --prefix=/usr/local/nginx-1.12
需要安装
gcc等编译工具 yum -y install gcc openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
make
编译,等待编译结束后执行make install
安装至指定目录/usr/local/nginx-1.12
,可以看到具有4个目录:
conf
存放了所有配置文件html
运行中的html文件logs
日志目录sbin
服务主程序
nginx
服务在运行时会保持一个主进程和一个或者多个worker process
工作进程,通过给主进程发送信号控制服务的启停。
-nginx
可接受的信号kill -USR1 ${nginx.pid}
信号 | 作用 |
---|---|
TERM 或 INT | 快速停止服务 |
QUIT | 平缓停止服务 |
HUP | 平滑重启 |
USR1 | 重新打开日志文件 |
USR2 | 平滑升级 |
WINTH | 平缓停止Worker Process |
#检查配置文件是否有错误
./nginx -t
#指定配置文件
./nginx -c conf_file
#优雅停止
./nginx -s stop
主要描述
nginx.conf
文件的内容
nginx.conf
文件结构主要由三块组成
全局块
events块
http块
,http块
中包含http全局块
和多个server块
,每个server
块中包含server全局块
和多个location块
,采用就近原则
生效
配置一些影响整体运行的指令,通常有
服务器用户组
允许生成的worker process
nginx.pid存放路径
日志存放路径
类型
配置文件引入
影响nginx服务器与用户的网络连接,这一块的设置对服务的性能影响较大。通常有
是否开启对WP下的网络进行序列化
是否允许同时接受多个网络连接
事件驱动模型
每个WP可以同时支持处理的最大连接数
重要组成部分,代理、缓存和日志定义、第三方模块的配置。 通常配置
文件引入
MIME-TYPE定义
日志自定义
是否使用sendfile传输文件
连接超时时间
单连接请求数上限
由于nginx的配置大部分是不限定具体位置的(可以在多个地方配置),所以此处将依次进行列举
# 配置alleyz用户 admin组下有启停权限
user alleyz [admin];
#所有用户具有启停权限
user nobody nobody;
worker process
# 如果设置为数字,启动以后就具有多少个worker process
# 设置为auto则自动检测
worker_processes number | auto;
pid
文件存放路径默认存放在logs/nginx.pid
#必须包含文件名称
pid logs/nginx_alleyz.pid;
可在全局块、http块 server块 location块配置
error_log file | stderr [ DEBUG | info | notice | warn | error | crit | alert | emerg];
任意地方
include file;
惊群问题
当某刻只有一个请求进来时,会唤醒多个睡眠的进程,造成性能的损耗
accept_mutex on | off;
events
multi_accept on | off; #默认关闭
events
可选择的内容有:
select poll kqueue epoll rtsig /dev/poll eventport
use epoll;
events
允许每一个WP同事开启的最大连接数。此值不能大于操作系统支持的打开的最大文件句柄数.
worker_connections number; #默认值 512
http server location
default_type mime-type; #默认为 text/plain
access_log 可在http server location中配置; log_format只能在http中配置
。
注意
前文提到的error_log 配置的是nginx的运行日志,此处指的是应答前端请求的服务日志。可以对日志的格式、大小、输出进行配置,有access_log log_format
指令, log_format 的string整体需要用'
括起来,变量名称使用双引号括起来
log_format name string;
access_log path [format [buffer=size]];
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
#如果取消日志记录
access_log off;
sendfile
方式传输文件相关指令
sendfile
sendfile_max_chunk
,默认开启
sendfile on | off;
sendfile_max_chunk size; #设置为0为限制
http块 server块 location块
,设置用户会话连接的保持时间
keepalive_timeout timeout[header_timeout];
server location
用户与服务端建立连接后,通过此连接发送的请求次数
keepalive_requests number;
listen address[:port] [default_server] [setfib=number] [backlog=number]
[rcvbuf=size] [sendbuf=size] [deferred] [accept_filter=filter] [bind] [ssl];
listen port [default_server] [setfib=number] [backlog=number] [rcvbuf=size]
[sendbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on | off] [ssl];
很少用
listen unix:path [default_server] [setfib=number] [backlog=number] [rcvbuf=size]
[sendbuf=size] [accept_filter=filter] [deferred] [bind] [ssl];
平常使用:
listen 3021;
listen 10.8.177.21;
listen 10.8.177.21:3022 default_server backlog==1024;
参数说明:
- address ip地址,如果是ipv6需要使用[fe13:..]
格式
- port 端口号,如果只有ip则默认80
- pathsocket
文件路径
- default_server, 标识符,将ip:port设置为默认的虚拟主机
- backlog 设置监听函数listen()
最多允许多少网络连接同时处于挂起的状态,默认511
(FreeBSD 为-1)
- rcvbuf 设置监听socket接受缓存区大小
- sendbuf 设置监听socket发送缓存区大小
- deferred 标识符,将accept()
设置为Deferred模式
- bind 标识符,使用独立的bind()
处理此adress:port,一般情况下端口相同而IP地址不同,只使用一个
- ssl 标识符,设置会话使用ssl模式(https)
- accept_filter 设置监听端口的请求过滤,被过滤的内容不能被接受和处理(只在FreeBSD NetBSD中有用)
- setfib 为监听socket关联路由表,只对FreeBSD
起作用
- 可以配置多个name
server_name name name1 name2 ....;
- 可以使用通配符
*
只能位于三段字符串组成的首尾或者两段字符串的尾部
server_name *.alleyz.com www.alleyz.*
- 使用正则表达式,
~
作为正则开始的标记,并且正则支持捕获
server_name ~([a-zA-Z\d]{1,4})\.alleyz.com$;
此时,如果通过
xisuo.alleyz.com
访问的话,可使用$1
捕获xisuo
;
一个名称若被多次匹配的访问优先级
:
- 匹配方式不同时
1. 精确匹配
2. 通配符在开始
3. 通配符在结尾
4. 正则表达式匹配
- 相同匹配方式时,首次处理优先(顺序)
需设置网卡能监听多个IP地址
# 临时生效
ifconfig em1:0 10.8.177.21 netmask 255.255.0.0 up
ifconfig em1:1 10.8.177.22 netmask 255.255.0.0 up
# 永久生效
echo "ifconfig em1:0 10.8.177.21 netmask 255.255.0.0 up" >> /etc/rs.local
# vi nginx.conf
...
server {
listen 3022;
server_name 10.8.177.32;
...
}
server {
listen 3022;
server_name 10.8.177.21;
...
}
kill -HUP `cat ../logs/nginx_alleyz.pid`
location [ = | ~ | ~* | ^~] uri {...}
=
用于普通uri
之前,表示严格匹配~
uri
包含正则表达式,并且区分大小写~*
表示包含正则表达式,并且不区分大小写^~
如果找到与uri匹配度最高的location,立即处理请求。 会对uri
进行反编码
http server location
服务器收到请求后查找资源的根目录路径,可以使用nginx预设的大多变量,唯
$document_root $realpath_root
不能使用;通常在location
块中使用。
root path;
除了使用
root
指定根目录,还可以使用alias
指令改变location接收到的请求路径
alias path;
location ~ ^/data/(.+\.(htm|html))${
alias html/data/other/$1;
}
可以针对不同的访问设置不同的首页
index index.html index.htm;
http server location
如果uri是path的话,则path是以nginx的安装目录为根路径的;
error_page code ... [=[response]] uri;
error_page 404 /404.html;
error_page 404 http://someone.com/404.html;
如果希望错误路径指向自定的位置:
error_page 404 /404.html
location /404.html{
root /home/alleyz/html;
}
http server location
allow address | CIDR | all;
deny address | CIDR | all;
location / {
root html;
index index.html;
deny 10.8.177.26;
}
基于
HTTP Basic Authentication
协议认证;文件中密码得加密!
# 生成密文,-c创建密码文件 -d采用crypt加密 -b 命令行指定密码
htpasswd -cdb passwd alleyz 123456
# string 开启认证功能,并设置提示信息
auth_basic string | off;
#file 包含用户名信息的文件路径
auth_basic_user_file file;
user alleyz;
worker_processes 2;
pid logs/nginx_alleyz.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main1 '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main1;
sendfile on;
keepalive_timeout 65;
server {
listen 3022;
server_name 10.8.177.32;
deny 10.8.177.26;
location / {
auth_basic "it`s auth test msg!";
auth_basic_user_file passwd;
root html/22;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 3022;
server_name 10.8.177.21;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
参考资料《nginx高性能web服务器讲解》