Nginx配置、使用

本文详细介绍了Nginx的配置结构,包括全局块、events块、http块和server块,重点讲解了反向代理、负载均衡、IP限制和限频功能。还提到如何统计Nginx的qps。
摘要由CSDN通过智能技术生成

nginx配置概述

全局块

  • 全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。
  • 通常包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。
  • 常用配置
    • user root;
      • Nginx 服务的默认用户是nobody,最好显式设置为root用户,不然可能会报没权限错误。比如使用/tmp下面的socket文件可能没权限

events块

  • events块涉及的指令主要影响Nginx服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处理连接请求,每个worker process可以同时支持的最大连接数等。
  • 这一部分的指令对Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。

http块

server块

  • server块对应一个虚拟主机(虚拟服务器)
  • listen指令
    • server块中最重要的指令就是listen指令,这个指令有三种配置语法。这个指令默认的配置值是:listen *:80 | *:8000;只能在server块种配置这个指令。
    • listen指令常用参数
      • address:监听的IP地址(请求来源的IP地址),如果是IPv6的地址,需要使用中括号“[]”括起来,比如[fe80::1]等。
      • port:端口号,如果只定义了IP地址没有定义端口号,就使用80端口。这边需要做个说明:要是你压根没配置listen指令,那么那么如果nginx以超级用户权限运行,则使用*:80,否则使用*:8000。多个虚拟主机可以同时监听同一个端口,但是server_name需要设置成不一样;
      • default_server:假如通过Host没匹配到对应的虚拟主机,则通过这台虚拟主机处理。具体的可以参考这篇文章,写的不错。
      • backlog=number:设置监听函数listen()最多允许多少网络连接同时处于挂起状态,在FreeBSD中默认为-1,其他平台默认为511。
      • accept_filter=filter,设置监听端口对请求的过滤,被过滤的内容不能被接收和处理。本指令只在FreeBSD和NetBSD 5.0+平台下有效。filter可以设置为dataready或httpready,感兴趣的读者可以参阅Nginx的官方文档。
      • bind:标识符,使用独立的bind()处理此address:port;一般情况下,对于端口相同而IP地址不同的多个连接,Nginx服务器将只使用一个监听命令,并使用bind()处理端口相同的所有连接。
      • ssl:标识符,设置会话连接使用SSL模式进行,此标识符和Nginx服务器提供的HTTPS服务有关。
  • server_name指令
    • 用于配置虚拟主机的名称。(可以是ip)
    • 在开始处理http请求时,Nginx会取出header中的host,与每个server中的server_name匹配,从此决定哪一个server去处理这个请求。
  • location指令
    • 每个server块中可以包含多个location块。在整个Nginx配置文档中起着重要的作用,而且Nginx服务器在许多功能上的灵活性往往在location指令的配置中体现出来。
    • location块的主要作用是,基于Nginx服务器接收到的请求字符串(例如, server_name/uri-string),对除虚拟主机名称(也可以是IP别名,后文有详细阐述)之外的字符串(前例中“/uri-string”部分)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在location块中提供功能。
  • root指令
    • 这个指令用于设置请求寻找资源的跟目录,此指令可以在http块、server块或者location块中配置。由于使用Nginx服务器多数情况下要配置多个location块对不同的请求分别做出处理,因此该指令通常在location块中进行设置。
  • index指令
    • 这应该是默认请求的文件名优先级列表

配置反向代理

配置一个

  • location是http.server下面的子块

配置一个服务

location / {
    proxy_pass http://127.0.0.1:8000
}

配置多个,前面有~是正则用法,

# /svc1开头的走这里
location ~ /svc1 {
    proxy_pass http://127.0.0.1:8000
}

# /svc2开头的走这里
location ~ /svc2 {
    proxy_pass http://127.0.0.1:8001
}

配置负载均衡

upstream myserver {
    #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
    server 192.168.80.121:80 weight=3;
    server 192.168.80.122:80 weight=2;
    server 192.168.80.123:80 weight=3;
}

配置禁ip(ip网段)

  • deny 10.29.44.0/24;
        location /{
            include fastcgi.conf;
            deny 10.29.44.0/24;
            fastcgi_pass 127.0.0.1:9000;
        }

在Nginx中,你可以使用deny指令来禁止特定的IP地址或IP地址范围访问你的网站。以下是一个基本的示例:

location / {
    deny 192.168.1.1;
    allow all;
}

在这个示例中,IP地址192.168.1.1被禁止访问网站的所有页面。allow all;指令允许所有其他IP地址访问网站。

你也可以使用CIDR表示法来禁止一个IP地址范围,如下所示:

location / {
    deny 192.168.1.0/24;
    allow all;
}

在这个示例中,192.168.1.0/24表示从192.168.1.0到192.168.1.255的所有IP地址。

如果你想禁止多个IP地址或IP地址范围,你可以使用多个deny指令,如下所示:

location / {
    deny 192.168.1.1;
    deny 10.0.0.0/8;
    allow all;
}

在这个示例中,IP地址192.168.1.1和从10.0.0.0到10.255.255.255的所有IP地址都被禁止访问网站。

请注意,你需要将这些指令添加到你的Nginx配置文件中的适当位置,然后重新加载或重启Nginx以使更改生效。在大多数系统中,你可以使用sudo systemctl reload nginx或sudo service nginx reload命令来重新加载Nginx配置。

配置限频

在Nginx中,你可以使用limit_req模块来限制请求的频率。这对于防止恶意用户或脚本进行洪水攻击(flood attack)或者DDoS攻击非常有用。

以下是一个基本的配置示例:

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

    server {
        location /login {
            limit_req zone=mylimit burst=20 nodelay;
            ...
        }
    }
}

在这个示例中,我们首先定义了一个名为mylimit的限制区域,使用$binary_remote_addr(即客户端的IP地址)作为关键字,分配了10MB的内存,并设置了请求的速率为每秒10个请求。

然后,在/login位置,我们应用了这个限制。burst=20参数表示如果请求超过了设定的速率,Nginx可以将多余的请求(最多20个)暂时存储起来,而不是立即拒绝。nodelay参数表示不对超出速率的请求进行延迟处理,如果超出burst值的请求将会立即得到503错误响应。

这只是一个基本的示例,你可能需要根据你的具体需求来调整这些参数。你也可以为不同的位置或服务器定义不同的限制。更多详细的信息,你可以查阅Nginx的官方文档。

配置限流

在Nginx中,你可以使用limit_rate指令来限制每个连接的数据传输速率,这就是所谓的"限流"。这个指令可以在http,server,location,或者if的上下文中使用。

以下是一个简单的例子:

server {
    location / {
        limit_rate 500k;
    }
}

在这个例子中,对/路径的请求的数据传输速率被限制为每秒500KB。

你也可以使用变量来动态设置limit_rate。例如,你可以根据请求的参数来设置传输速率:

server {
    location / {
        if ($arg_rate) {
            set $limit_rate $arg_rate;
        }
    }
}

在这个例子中,如果请求的URL包含一个rate参数(例如/path?rate=500k),那么数据传输速率将被限制为该参数的值。

请注意,你需要重新加载或重启Nginx以使更改生效。在大多数系统中,你可以使用sudo systemctl reload nginx或sudo service nginx reload命令来重新加载Nginx配置。

统计Nginx的qps

  • 16
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值