Nginx学习笔记(二)——Nginx的常用配置

在开始之前,我们先把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地址。

打印结果:

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

原文地址:https://www.cnblogs.com/hejianliang/p/14029321.html