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

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

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

cp nginx.conf nginx.conf.bak

 

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

入门配置

静态页面配置

动静分离

图片防盗配置

黑白名单配置

下载限速配置

日志配置

 

 

先看一个简单配置

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

NGINX快速入门(03)Nginx的常用配置_第1张图片

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表示页面所载目录

 

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

然后启动,访问:

NGINX快速入门(03)Nginx的常用配置_第2张图片

没有问题!

 

 

自定义一个页面

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

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

NGINX快速入门(03)Nginx的常用配置_第3张图片

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

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

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

NGINX快速入门(03)Nginx的常用配置_第4张图片

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

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

然后从浏览器访问一下:

可以看到访问成功!

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

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

NGINX快速入门(03)Nginx的常用配置_第5张图片

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

 

 

 

实现动静分离

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

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

NGINX快速入门(03)Nginx的常用配置_第6张图片

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

NGINX快速入门(03)Nginx的常用配置_第7张图片

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

NGINX快速入门(03)Nginx的常用配置_第8张图片

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

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

NGINX快速入门(03)Nginx的常用配置_第9张图片

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

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

NGINX快速入门(03)Nginx的常用配置_第10张图片

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

NGINX快速入门(03)Nginx的常用配置_第11张图片

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

NGINX快速入门(03)Nginx的常用配置_第12张图片

访问页面就可以了:

NGINX快速入门(03)Nginx的常用配置_第13张图片

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

NGINX快速入门(03)Nginx的常用配置_第14张图片

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

NGINX快速入门(03)Nginx的常用配置_第15张图片

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

NGINX快速入门(03)Nginx的常用配置_第16张图片

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

NGINX快速入门(03)Nginx的常用配置_第17张图片

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

NGINX快速入门(03)Nginx的常用配置_第18张图片

页面是:

NGINX快速入门(03)Nginx的常用配置_第19张图片

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

NGINX快速入门(03)Nginx的常用配置_第20张图片

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

NGINX快速入门(03)Nginx的常用配置_第21张图片

 

 

 

防盗链配置

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

NGINX快速入门(03)Nginx的常用配置_第22张图片

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

然后访问新的:

NGINX快速入门(03)Nginx的常用配置_第23张图片

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

NGINX快速入门(03)Nginx的常用配置_第24张图片

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

NGINX快速入门(03)Nginx的常用配置_第25张图片

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

只能在网站里看图片:

NGINX快速入门(03)Nginx的常用配置_第26张图片

 

 

 

黑白名单配置

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

NGINX快速入门(03)Nginx的常用配置_第27张图片

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

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

NGINX快速入门(03)Nginx的常用配置_第28张图片

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

NGINX快速入门(03)Nginx的常用配置_第29张图片

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

 

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

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

NGINX快速入门(03)Nginx的常用配置_第30张图片

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

NGINX快速入门(03)Nginx的常用配置_第31张图片

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

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

 

 

网络限速配置

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

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

NGINX快速入门(03)Nginx的常用配置_第32张图片

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

 

NGINX快速入门(03)Nginx的常用配置_第33张图片

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

 

 

 

日志配置

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

NGINX快速入门(03)Nginx的常用配置_第34张图片

常见的日志变量:

$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

NGINX快速入门(03)Nginx的常用配置_第35张图片

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

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

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

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

NGINX快速入门(03)Nginx的常用配置_第36张图片

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

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

刷新页面,查看日志:

NGINX快速入门(03)Nginx的常用配置_第37张图片

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

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

这个格式和默认的基本一样了,大家也应该都知道每个部分的含义了,刷新查看:

NGINX快速入门(03)Nginx的常用配置_第38张图片

自己使用的时候,根据需求配置日志格式即可。

 

配置的时候,文件还可以根据网址命名,如:

access_log logs/$host.access.log main;

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

user root;

 

NGINX快速入门(03)Nginx的常用配置_第39张图片

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

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

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

NGINX快速入门(03)Nginx的常用配置_第40张图片

刷新并查看error日志:

NGINX快速入门(03)Nginx的常用配置_第41张图片

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

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

events {

        debug_connection 192.168.1.100; 

        debug_connection 192.168.168.128;

}

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

你可能感兴趣的:(Nginx学习,nginx,linux,java)