• 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地址。

    打印结果:

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

  • 相关阅读:
    CodeForces Round #521 (Div.3) B. Disturbed People
    CodeForces Round #521 (Div.3) A. Frog Jumping
    Lyft Level 5 Challenge 2018-Final Round(Open Div.2) B. Taxi drivers and Lyft
    #Leetcode# 2. Add Two Numbers
    #Leetcode# 29. Divide Two Integers
    #Leetcode# 122. Best Time to Buy and Sell Stock II
    #Leetcode# 121. Best Time to Buy and Sell Stock
    #LeetCode# 48. Rotate Image
    #Leetcode# 5. Longest Palindromic Substring
    原理优先的重要性_就signal探讨
  • 原文地址:https://www.cnblogs.com/hejianliang/p/14029321.html
Copyright © 2020-2023  润新知