NGINX快速入门(03)Nginx的常用配置

上一篇文章我们主要介绍的Nginx的架构,其实主要是Nginx包含了哪些内容,有哪些功能和技术点。知道了这些,我们就可以猜到,Nginx的配置大部分和这些功能有关系。下面逐步介绍一些常见配置。

首先进入nginx安装目录的conf文件夹下,备份一下默认的配置文件,防止修改错了恢复不了:

cp nginx.conf nginx.conf.bak


下面我们介绍几种常用配置:

入门配置

静态页面配置

动静分离

图片防盗配置

黑白名单配置

下载限速配置

日志配置



先看一个简单配置

备份完可以编辑文件了,首先删除配置文件里的全部内容,然后编写下面这样的配置:

Nginx里面也是分为一个个配置块的,和大部分代码一样,用大括号括起来。比如上面的events {。。。}就是一个配置块。

注意配置块的名称(events)和左大括号直接要有空格。

配置块里面的以分号结尾的一行(如 worker_connections  1024;)就是该配置块的一个属性。


上面这个简单的配置共有一个外部属性(worker_processes)和两个配置块(events、http)。以下是各个部分的含义:

1 worker_processes  属性表示的是worker进程的进程数

2 events 表示对事件的配置

2.1 events中worker_connections的含义是最大链接数

3 http表示对http请求的配置

3.1 http中的include属性表示引入的意思,示例中表示nginx的配置文件引入了mime.types文件

3.2 default_type表示请求响应的默认数据类型

3.3 sendfile属性值为on表示启用sendfile,sendfile的作用是在底层拷贝数据的时候可以跳过应用,直接从内核拷贝到网卡,加快速度

3.4 keepalive_timeout表示长连接的一个保活时间,一个连接请求完并不是立马销毁,通过这个属性可以等一段时间,以便下次有请求继续用

3.5 server 配置块代表配置一个虚拟机,用来启动并响应

3.5.1 server中的listen属性表示监听的端口,不能和其它重复

3.5.2 server中server_name用来配置域名,分发请求的时候会根据访问的域名和配置的域名的对应关系分发

3.5.3  server中location表示其中一个请求的地址 后面可以加斜杠,等于号等正则表达式方式匹配,其中的内容是对应的链接和页面,root表示页面所载目录


上面的配置只是初级的很少的一部分配置,我们一一解释了都是什么意思。接下来启动测试一下,首先检测一下配置文件有没有错误:

然后启动,访问:

没有问题!



自定义一个页面

接下来在安装目录的html文件夹下面新建www/test目录,进入test,新建test.html文件,输入内容 hello nginx test!

然后去nginx中增加对此页面的配置:

listen端口与原来的监听一样也可以,因为可以设置不一样的域名,也就是server_name;

server_name可以写域名www.test.com,也可以写正则表达式形式,如 *.test.com,可以同时配置多个。

配置完后,去检查一下配置是否正确:

没问题后,不用重启nginx,重新加载一次配置文件即可:

由于配置了域名访问,所以要给本机host加一个域名配置:

然后从浏览器访问一下:

可以看到访问成功!

注意,如果不想带端口,可以把nginx设置为80默认端口。

还可以将root配置到location外面:

这样server中无论配置几个location都可以继承server中的root。




实现动静分离

很多时候为了负载更高一些,会把静态文件(如css,js,图片等)和动态文件(如html,jsp等)进行分开。也即是常说的动静分离。这也是可以在nginx中配置的。

首先在上面的www目录中新建路径 static目录,往里面拷贝一个图片test.jps:

然后修改test.html文件,加入图片的展示:

保存后,访问页面可以看到效果:

可以看到图片展示失败,是因为图片的位置并不在我们配置的root属性的目录下面。

下面我们把静态文件也配置到nginx中:

新增一个location,路径为/static,里面配置目录root为文件的路径,现在重新加载,直接访问图片试试:

可以看到访问找不到,原因是因为静态文件配置了/static路径,location里面又配置了root,那么在目录中找文件的时候默认会再加上一个static,真实的寻找路径是 html/www/static/static路径,这个路径是没有的因此404。下面吧root改为alias别名方式:

保存从新加载,可以看到访问成功:

所以如果我们的设置的文件在static目录下,设置的路径本来也是/static,就不能用root,但是如果我们设置的文件夹是static,但是静态文件在文件夹下的css文件夹中,那么可以用root,路径设置为/css即可。为了防止混乱,最好静态文件都建议用alias。此时修改html文件:

访问页面就可以了:

正则表达式也是常用的配置方式,下面介绍一种正则表达式的配置:

正则表达式匹配了以几种后缀结尾的文件,这时候使用root就可以,然后可以访问图片:

可以看到路径直接变成了根路径,我们在static下面新建一个image文件夹,把图片剪切到里面,

这时候在后面带上/image/test.jpg即可:

可见上面这种正则表达式配置可以把static下面二级路径下的所有静态文件都访问到,这是一种配置所有静态文件省事的方式,但是正则表达式遗忘性比较大,所以使用哪种方式看个人。此时修改html文件即可访问到:

页面是:

上面介绍了三种location的配置方式,还有一种是直接用等号写死的:

上面直接等于了一个/baidu.html的路径,下面使用proxy_pass属性代理了百度的官网,关于反向代理后面会讲。此时访问baidu.html可以直接访问到百度官网:




防盗链配置

防盗链就是防盗的,主要是别的网站使用本网站的图片等资源就视为被盗了,因此要做特殊防盗配置。配置如下:

valid_referers属性表示只允许*.test.com的域名访问图片,下面的if是判断不是设定的域名的时候,返回403.我们在server_name后面在配置一个域名:

然后访问新的:

可以看到图片是不显示的,查看状态

可以看到图片返回403。此时直接输入图片地址还是可以访问的,我们把配置再改一下:

把防盗配置中的none blocked去掉,这样单独直接访问图片也没法访问了:

只能在网站里看图片:




黑白名单配置

经常爬数据机器刷的ip,可以设置为黑名单禁止访问,首先在别的机器上面访问一下当前配置的nginx:

目前可以访问到,然后在安装目录的配置文件目录下新建黑名单文件 black.ip,输入一下内容:

修改nginx配置文件,引入黑名单:

这个既可以防盗http下面,作为总的黑名单,也可以放到单独一个server下面,现在在别的机器上再次访问:

提示403,已经进入黑名单了!


下面设置白名单,先把黑名单的include注释掉,然后再黑名单的同一个目录新建一个白名单white.ip:

配置一个ip ,设置数值为1,然后修改配置文件:

文件中修改了两个地方,geo是引入白名单,并设置出了白名单之外的默认值是0,location里面做了判断,只要是0的就不在白名单之列,一律返回403,下面在白名单机器上访问:

看到可以成功,在其他机器上访问页面:

可以看到对应的location路径已经不能访问了。白名单功能适合单独由内网访问的系统。



网络限速配置

打开带图片的页面,可以发现图片加载的速度相当快,这是浏览器下载图片的速度快!

下面修改配置文件进行限速:

limit_rate_after表示小于2k的部分不限速,大于的部分限速。limit_rate表示如果限速那么限速下载的速度为1k。然后我们从新打开页面,发现图片加载非常慢:


限速成功!如果是一个压缩文件下载限速,也是同样的道理。




日志配置

nginx的日志配置主要使用两个属性,log_format设置日志格式,access_log用来定义日志级别,日志位置。在原来默认的配置文件中都能看到,可以在备份中查看:

常见的日志变量:

$remote_addr, $http_x_forwarded_for 记录客户端IP地址

$remote_user记录客户端用户名称

$request记录请求的URL和HTTP协议(GET,POST,DEL,等)

$status记录请求状态

$body_bytes_sent发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。

$bytes_sent发送给客户端的总字节数。

$connection连接的序列号。

$connection_requests 当前通过一个连接获得的请求数量。

$msec 日志写入时间。单位为秒,精度是毫秒。

$pipe如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。

$http_referer 记录从哪个页面链接访问过来的

$http_user_agent记录客户端浏览器相关信息

$request_length请求的长度(包括请求行,请求头和请求正文)。

$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。

$time_iso8601 ISO8601标准格式下的本地时间。

$time_local通用日志格式下的本地时间。

下面我们先加一个简单的日志:

日志格式很简单,文件还是同样的日志文件,把原来的日志备份走,新建一个日志,从新打开日志,执行repon

然后刷新两次页面,查看日志:

可以看到日志里面只记录了ip地址,我们再把日志内容丰富一下:

'$remote_addr-$remote_user-[$time_local]-$request';

打印出ip,远程用户,时间,和访问地址,再次刷新查看日志:

再次丰富日志,打印请求状态,发送给用户的字节数,并记录从哪个页面访问过来的:

log_format main '$remote_addr-$remote_user-[$time_local]-"$request"-$status-$body_bytes_sent-"$http_referer"';

刷新页面,查看日志:

再次丰富日志格式,记录客户端浏览器相关信息等:

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/$host.access.log main;

如果原来没有这个文件,那就需要创建,创建需要权限,要在整体配置文件的第一行加上

user root;


reopen一下,然后刷新页面,可以看到对应的网址的日志进入到了对应的日志文件中:

有的时候配置生成日志文件不成功是因为没有加上user root。上面再日志的格式上也加上了,日志文件中也会打印:

我们把生成的日志文件删除,user root注释掉,这样肯定不会生成新日志文件,如果要从日志中查看原因,需要设置error日志,并设置为debug日志:

刷新并查看error日志:

日志中显示,我们并没有访问该域名日志文件的权限,因此failed,这样根据debug日志能很好的调试问题!

平时都这样error的日志量肯定很大,可以针对指定客户端,进行debug日志输出,

events {

        debug_connection 192.168.1.100; 

        debug_connection 192.168.168.128;

}

这样其他客户端访问就不会打debug日志!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容