在开始之前,我们先把nginx的默认配置文件备份一份,以防修改错了恢复不了(进入nginx conf目录)
cp nginx.conf nginx.conf.bak
下面介绍几种常用的配置:
1.入门配置
2.静态页面配置
3.动静分离
4.防盗配置
5.黑白名单配置
6.网络限速配置
7.日志配置
1.入门配置
备份完nginx.conf文件后可以编辑文件,删除配置文件里的内容,然后编写如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 139.196.158.120;
location / {
root html;
index index.html index.htm;
}
}
}
Nginx里面也是分为一个个配置块,和大部分代码一样,用大括号扩起来。
配置块里面的以分号结尾的一行,如(worker_connections 1024;)就是配置块里的一个属性,属性以分号结束。
上面的配置共有一个外部属性(work_processes)和两个配置块(events、http)。各个部分的含义:
1.worker_processes : 表示worker进程的进程数;
2.events : 表示对事件的配置;
3.events里的worker_connections : 表示最大连接数;
4.http :表示对http请求的配置;
5.http里的include : 表示引入的意思,示例中引入了mime.types文件;
6.default_type : 表示请求响应的默认数据类型;
7.sendfile : 该属性值为on表示启用sendfile,sendfile的作用是在底层拷贝数据的时候可以跳过应用,直接从内核拷贝到网卡,加快速度;
8.keepalive_timeout : 表示长连接的一个保活时间,一个连接请求完并不是马上销毁,通过这个属性可以等一段时间,以便下次有请求继续使用;
9.server : 该配置块代表配置一个虚拟机,用来启动并响应;
10.server里的listen : 表示监听的端口,不能和其他重复;
11.server里的server_name : 用来配置域名,分发请求的时候会根据访问的域名和配置的域名的对应关系分发;
12.server里的location : 表示其中一个请求的地址,后面可以加斜杠、等于号等正则表达式匹配,其中的内容是对应的连接和页面,root表示页面所在目录;
以上配置只是很简单的一部分,接下来启动测试一下,首先检查配置文件有没错误,回到nginx目录,输入命令(./sbin/nginx -t):
syntax is ok。说明配置文件没错误,然后启动nginx,访问:
没有问题。
2.静态页面配置
接下来再安装目录的html目录下,新建www/demo目录,进入demo,新建demo.html:
demo.html:
<DOCTYPE html>
<html>
<head>
<title>Nginx demo</title>
</head>
<body>
hello nginx!
</body>
</html>
接着去nginx中增加对该页面的配置:
将原来的配置修改后,检查是否正确:
没有问题,这次我们不用重启Nginx,重新加载一次配置文件即可:
切换到浏览器访问:
可以看到访问成功!
3.动静分离
很多时候为了负载更高一些,会把静态文件(如CSS、JS、图片等)和动态文件(HTML、JSP)进行分开。也就是常说的动静分离,这也是可以在Nginx中配置的。
首先在上面的www目录中新建static目录,往里面拷贝一个图片文件:
然后修改demo.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。
此时修改demo.html文件:
访问页面就成功展示图片了:
4.防盗链配置
防盗链就是防盗的,主要是别的网站使用本网站的资源,就视为被盗了,因此要做特殊防盗配置。配置如下:
valid_referers属性表示只允许 www.hejianliang.info 的域名访问图片,下面的 if 是判断不是设定的域名的时候,返回403.我们在server_name后面再配置一个域名:
保存、重新加载配置文件,然后访问 139.196.158.120:
图片现在访问不了,接着访问 www.hejianliang.info:
该域名可以访问静态资源。
5.黑白名单配置
经常爬数据机器刷的ip,可以设置为黑名单禁止访问,首先在别的机器上面访问当前配置的Nginx:
目前可以访问到,然后再安装目录的配置文件目录下新建黑名单文件 black.ip ,并输入如下:
(此处的ip,读者应改为你们其他的机器ip)
修改Nginx配置文件,引入黑名单文件:
这个既可以防盗http下面,作为总的黑名单,也可以放到单独一个server下面,保存、重载配置,现在在别的机器上再次访问:
提示403,黑名单配置生效了。
下面配置白名单,先把黑名单的include注释掉,然后再conf 目录下新建白名单文件(white.ip),并输入如下:
配置一个ip,设置数值为1,然后修改配置文件:
配置文件中修改两个地方,geo 是引入白名单,并设置处理白名单以外的默认值是0,location里做了判断,只要是0的就不在白名单之内,并返回403,下面分别的白名单内、外访问:
白名单内访问:
访问正常,白名单外访问:
返回403,因为不在白名单内,说明白名单配置生效。
6.网络限速配置
打开带图片的页面,可以发现图片加载速度很快,这是浏览器下载图片的速度快,下面修改配置文件进行限速:
上面先把白名单判断、防盗链配置注释;新加了一个location,limit_rate_after表示小于20k文件大小的不限速,大于的部分限速。limit_rate表示如果限速,那么下载速度为10k。然后我们从新打开页面,图片加载速度非常慢:
图片目前才加载到一半,限制成功。
7.日志配置
Nginx日志配置主要使用两个属性:log_format设置日志格式,access_log用来定义日志级别、位置。常见的日志变量:
$remote_addr, $http_x_forwarded_for:客户端IP地址
$remote_user:客户端用户名称
$request:请求的URL和HTTP协议
$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_lenght:请求的长度(请求行、请求头和请求正文)
$request_time:请求处理的时间(单位秒,精度毫秒);从读入客户端的第一个字节开始,知道把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601:ISO8601标准格式下的本地时间
$time_local:通用日志格式下的本地时间
下面配置一个简单的日志:
在http块了添加两个日志属性,去到logs目录把原来的日志备份,新建一个日志文件(access.log),重新加载nginx配置文件,然后刷新两次页面,查看日志:
可以看到日志里面只记录了ip地址,继续将日志内容丰富一些:
'$remote_addr - $remote_user - [$time_local] - "$request" - $status - $body_bytes_sent - "$http_referer" - "$http_user_agent" - "$http_x_forwarded_for"';
打印出ip、远程用户、时间、访问地址、状态响应码、发送给客户端字节数、记录从哪个页面链接访问过来、客户端浏览器信息、客户端ip地址。
打印结果:
自己使用的时候,根据需求配置日志格式即可。