作者:京东物流殷世杰
Nginx已经广泛应用于J-one和Jdos的环境摆设上,本文对Nginx的常用的设置和根本功能举行讲授,得当Nginx入门学习。
1核心设置
找到Nginx安装目次下的conf目次下nginx.conf文件,Nginx的根本功能设置是由它提供的。
1.1设置文件布局
Nginx的设置文件(conf/nginx.conf)团体上分为如下几个部分:
地区
职责
全局块
设置和Nginx运行相干的全局设置
events块
设置和网络链接相干的设置
http块
设置署理、缓存、日记记录、假造主机等设置
server块
设置假造主机的相干参数,一个http快中可以有多个server块
location块
设置哀求的路由,以及各种页面的处理惩罚环境
设置层级图如下所示。
1.2设置文件示例
一个比力全的设置文件示比方下。
#以下是全局段设置
#useradministratoradministrators;#设置用户大概组,默以为nobodynobody。
#worker_processes2;#设置进程数,默以为1
#pid/nginx/pid/nginx.pid;#指定nginx进程运行文件存放地点
error_loglog/error.logdebug;#订定日记路径,级别:debug|info|notice|warn|error|crit|alert|emerg
#events段设置信息
events{
accept_mutexon;#设置网路毗连序列化,防止惊群征象发生,默以为on
multi_accepton;#设置一个进程是否同时担当多个网络毗连,默以为off
#useepoll;#变乱驱动模子,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections1024;#最大毗连数,默以为512
}
#http、设置哀求信息
http{
includemime.types;#文件扩展名与文件范例映射表
default_typeapplication/octet-stream;#默认文件范例,默以为text/plain
#access_logoff;#取消服务日记
log_formatmyFormat'$remote_addr–$remote_user[$time_local]$request$status$body_bytes_sent$http_referer$http_user_agent$http_x_forwarded_for';#自界说格式
access_loglog/access.logmyFormat;#combined为日记格式的默认值
sendfileon;#答应sendfile方式传输文件,默以为off,可以在http块,server块,location块。
sendfile_max_chunk100k;#每个进程每次调用传输数量不能大于设定的值,默以为0,即不设上限。
keepalive_timeout65;#毗连超时时间,默以为75s,可以在http,server,location块。
upstreammysvr{
server127.0.0.1:7878;
server192.168.10.121:3333backup;#热备
}
error_page404https://www.baidu.com;#错误页
#第一个Server区块开始,表现一个独立的假造主机站点
server{
keepalive_requests120;#单毗连哀求上限次数。
listen4545;#监听端口
server_name127.0.0.1;#监听地点
location~*^.+${#哀求的url过滤,正则匹配,~为区分巨细写,~*为不区分巨细写。
#rootpath;#根目次
#indexvv.txt;#设置默认页
proxy_passhttp://mysvr;#哀求转向mysvr界说的服务器列表
deny127.0.0.1;#拒绝的ip
allow172.18.5.54;#答应的ip
}
}
}
1.3locat路径映射讲授
1.3.1格式:
location[=|~|~*|!~|!~*|@]uri{...}
1.3.2表明:
=表现正确匹配,假如找到,立即克制搜刮并立即处理惩罚此哀求。
~表现实行一个正则匹配,区分巨细写匹配
~*表现实行一个正则匹配,不区分巨细写匹配
!~区分巨细写不匹配
!~*不区分巨细写不匹配
^~即表现只匹配平凡字符(空格)。利用前缀匹配,^表现“非”,即不查询正则表达式。假如匹配乐成,则不再匹配其他location。
@指定一个定名的location,一样平常只用于内部重定向哀求。比方error_page,try_files
uri是待匹配的哀求字符串,可以不包罗正则表达式,也可以包罗正则表达式;
1.3.3优先级和示例:
[不加][~/~*][^~][=]
示比方下:
location=/{
#正确匹配/,主机名背面不能带任何字符串/
#只匹配http://abc.com
#http://abc.com[匹配乐成]
#http://abc.com/index[匹配失败]
}
location^~/img/{
#以/img/开头的哀求,都会匹配上
#http://abc.com/img/a.jpg[乐成]
#http://abc.com/img/b.mp4[乐成]
}
location~*/Example/{
#则会忽略uri部分的巨细写
#http://abc.com/test/Example/[匹配乐成]
#http://abc.com/example/[匹配乐成]
}
location/documents{
#假如有正则表达式可以匹配,则优先匹配正则表达式。
#http://abc.com/documentsabc[匹配乐成]
}
location/{
#http://abc.com/abc[匹配乐成]
}
2反向署理
2.1反向署理概念:
反向署理(ReverseProxy)是指以署理服务器来担当internet上的毗连哀求,然后将哀求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上哀求毗连的客户端。真实的服务器不能直接被外部网络访问,以是必要一台署理服务器,而署理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,固然也大概是同一台服务器,端口差别而已。
反向署理通过proxy_pass指令来实现。
2.2反向署理示例:
server{
listen80;
server_namelocalhost;
location/{
proxy_passhttp://localhost:8081;
proxy_set_headerHost$host:$server_port;#为哀求头添加Host字段,用于指定哀求服务器的域名/IP地点和端标语。
#设置用户ip地点
proxy_set_headerX-Forwarded-For$remote_addr;#为哀求头添加XFF字段,值为客户端的IP地点。
#当哀求服务器堕落去探求其他服务器
proxy_next_upstreamerrortimeoutinvalid_headerhttp_500http_502http_503;
当我们访问localhost的时间,ngnix就将我们的哀求转到localhost:8081了
3负载均衡
3.1负载均衡概念:
当有2台或以上服务器时,署理服务器根据规则将哀求分发到指定的服务器上处理惩罚。
3.2负载均衡战略及示例:
Nginx如今支持多种负载均衡战略,这里讲授常用的6种。
3.2.1RR(roundrobin:轮询默认):
每个哀求按时间次序逐一分配到差别的后端服务器,也就是说第一次哀求分配到第一台服务器上,第二次哀求分配到第二台服务器上,假如只有两台服务器,第三次哀求继承分配到第一台上,如许循环轮询下去,也就是服务器吸取哀求的比例是1:1,假如后端服务器down掉,能主动剔除。轮询是默认设置,不必要太多的设置
同一个项目分别利用8081和8082端口启动项目
upstreamweb_servers{
serverlocalhost:8081;
serverlocalhost:8082;
}
server{
listen80;
server_namelocalhost;
#access_loglogs/host.access.logmain;
location/{
proxy_passhttp://web_servers;
proxy_set_headerHost$host:$server_port;
}
3.2.2热备:
假设有2台服务器,当一台服务器发生变乱时,才启用第二台服务器给提供服务。服务器处理惩罚哀求的次序:AAAAAA忽然A挂了,服务器处理惩罚哀求的次序:BBBBBBBBBBBBBB.....
upstreamweb_servers{
server127.0.0.1:7878;
server192.168.10.121:3333backup;#热备
}
3.2.3权重
跟据设置的权重的巨细而分发给差别服务器差别数量的哀求。假如不设置,则默以为1。下面服务器的哀求次序为:ABBABBABBABBABB....。
upstreamweb_servers{
serverlocalhost:8081weight=1;
serverlocalhost:8082weight=2;
}
3.2.4ip_hash
如许每个ip地点固定访问一个后端服务器,可以办理session的题目。
upstreamtest{
ip_hash;
serverlocalhost:8080;
serverlocalhost:8081;
}
3.2.5fair(第三方)
按后端服务器的相应时间来分配哀求,相应时间短的优先分配。这个设置是为了更快的给用户相应。
upstreambackend{
fair;
serverlocalhost:8080;
serverlocalhost:8081;
}
3.2.6url_hash(第三方)
按访问url的hash结果来分配哀求,使每个url定向到同一个后端服务器,后端服务器为缓存时比力有效。在upstream中参加hash语句,hash_method是利用的hash算法
upstreambackend{
hash_methodcrc32;
hash$request_uri;
serverlocalhost:8080;
serverlocalhost:8081;
}
以上6种负载均衡各自实用差别环境下单独大概肴杂利用,可以根据实际环境选择利用,fair和url_hash必要安装第三方模块才华利用。
4动静分离:
4.1动静分离概念:
动静分离是指在web服务器架构中,将静态页面与动态页面大概静态内容接口和动态内容接口分开差别体系访问的架构计划方法,进而提拔整个服务访问性能和可维护性。
4.2动静分离示例:
upstreamweb_servers{
serverlocalhost:8081;
serverlocalhost:8082;
}
server{
listen80;
server_namelocalhost;
set$doc_root/usr/local/var/www;
location~*\.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)${
root$doc_root/img;
}
location/{
proxy_passhttp://web_servers;
proxy_set_headerHost$host:$server_port;
}
error_page500502503504/50x.html;#出现500502503504错误时走内部跳转
location=/50x.html{
root$doc_root;
}
}
结果:访问http://localhost/test.jpg时直接返回/usr/local/var/www/img路径下的图片.
访问http://localhost/index.html就会访问后端服务器(tomcat等)
5其他常用的指令:
5.1.return指令
返回http状态码和可选的第二个参数可以是重定向的URL
returncode[text];
returncodeURL;
returnURL;
比方:
location/{
return404;#直接返回状态码
}
location/{
return404"pagesnotfound";#返回状态码+一段文本
}
location/{
return302/bbs;#返回状态码+重定向地点
}
location/{
returnhttps://www.baidu.com;#返回重定向地点
}
5.2rewrite指令
重写URI哀求rewrite,通过利用rewrite指令在哀求处理惩罚期间多次修改哀求URI,该指令具有一个可选参数和两个必须参数。
第一个(必须)参数是哀求URI必须匹配的正则表达式。
第二个参数是用于更换匹配URI的URI。
可选的第三个参数重写战略
last重写后的URL发起新哀求,再次进入server段,重试location的中的匹配;
break直接利用重写后的URL,不再匹配别的location中语句;
redirect返回302临时重定向;
permanent返回301永世重定向;
location/users/{
rewrite^/users/(.*)$/show?user=$1break;
}
5.3error_page指令
利用error_page指令,您可以设置NGINX返回自界说页面以及错误代码,更换相应中的其他错误代码,或将欣赏器重定向到其他URI。在以下示例中,error_page指令指定要返回404页面错误代码的页面(/404.html)。
server{
error_page500502503504/50x.html;
location=/50x.html{
roothtml;
}
}
5.4日记
访问日记:必要开启压缩gzipon;否则不天生日记文件,打开log_format、access_log解释
log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent""$http_x_forwarded_for"';
access_log/usr/local/etc/nginx/logs/host.access.logmain;
gzip
5.5deny、allow指令
#克制访问某个目次
location/{
allow192.168.0.0;
allow127.0.0.1;
denyall;
#这段设置值答应192.168.0./24网段和127.0.0.1的哀求,其他泉源IP全部拒绝。
}
5.6内置变量
nginx的设置文件中可以利用的内置变量以美元符$开始。此中,大部分预界说的变量的值由客户端发送携带。
$args:#这个变量便是哀求行中的参数,同$query_string
$content_length:哀求头中的Content-length字段。
$content_type:哀求头中的Content-Type字段。
$document_root:当前哀求在root指令中指定的值。
$host:哀求行的主机名,为空则为哀求头字段Host中的主机名,再为空则与哀求匹配的server_name
$http_user_agent:客户端agent信息
$http_cookie:客户端cookie信息
$limit_rate:这个变量可以限定毗连速率。
$request_method:客户端哀求的动作,通常为GET或POST。
$remote_addr:客户端的IP地点。
$remote_port:客户端的端口。
$remote_user:已经颠末AuthBasicModule验证的用户名。
$request_filename:当前哀求的文件路径,由root或alias指令与URI哀求天生。
$scheme:HTTP方法(如http,https)。
$server_protocol:哀求利用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr:服务器地点,在完成一次体系调用后可以确定这个值。
$server_name:服务器名称。
$server_port:哀求到达服务器的端标语。
$request_uri:包罗哀求参数的原始URI,不包罗主机名,如:”/foo/bar.php?arg=baz”。
$uri:不带哀求参数的当前URI,$uri不包罗主机名,如”/foo/bar.html”。
$document_uri:与$uri雷同
6总结
Ngnix是一款高性能反向署理服务器,学习它非常有须要,本文讲授了Ngnix核心设置,先容了反向署理,负载均衡,动静分离三大功能,末了扩展了一些常用的指令。本文先容了Ngnix的底子用法,后续的Ngnix内核以及原理部分有待研究。
我要评论