【centos 安装配置nginx】nginx负载均衡、限流配置

发布时间:2024年01月19日

本篇博客将详细介绍如何在centos上安装并配置nginx,步骤详细,希望能帮助到刚接触nginx的伙伴。
在这里插入图片描述

一、安装插件

1.安装gcc插件
因为nginx是用c语言编写的,所有要安装gcc。先检查是否已经安装过了。
提示:一般租的服务区里面是都有的,如果没有安装的话会提示命令找不到。

检查命令:gcc -v
请添加图片描述
如果没有的话执行 安装命令:yum -y install gcc
2. pcre、pcre-devel安装

yum install -y pcre pcre-devel

介绍:pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。

3 . zlib安装

yum install -y zlib zlib-devel

介绍:zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装
4 . 安装openssl

yum install -y openssl openssl-devel

openssl是一个安全套接字层密码库,nginx要支持https,需要使用openssl

二、安装Nginx步骤

1 下载nginx安装包

wget http://nginx.org/download/nginx-1.18.0.tar.gz 

2 把压缩包解压到/usr/local

tar -zxvf nginx-1.18.0.tar.gz -C  /usr/local/

3 cd到文件路径

cd  /usr/local/nginx-1.18.0

4 编译

./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tem/nginx/client --http-proxy-temp-path=/var/tem/nginx/proxy --http-fastcgi-temp-path=/var/tem/nginx/fcgi --with-http_stub_status_module

5 安装

make && make install

6 启动

nginx -c /etc/nginx/nginx.conf

7 出现[emerg] getpwnam(“nginx”) failed 错误,执行下述命令

命令1:useradd -s /sbin/nologin -M nginx
命令2:id nginx

8 出现 [emerg] mkdir() “/var/temp/nginx/client” failed (2: No such file or directory) 错误,执行下述命令

sudo mkdir -p /var/tem/nginx/client

9 给正在运行的防火墙,添加HTTP和HTTPS通信

命令1:sudo firewall-cmd --permanent --zone=public --add-service=http 
命令2:sudo firewall-cmd --permanent --zone=public --add-service=https

命令3:sudo firewall-cmd --reload

10.nginx 重启并查看是否启动成功
进入nginx可执行目录sbin下,输入命令./nginx -s reload 即可

cd /sbin
重启命令:./nginx -s reload
查看状态命令:ps -ef | grep nginx

11 访问你的服务器IP
请添加图片描述

三 、nginx常用命令

启动:nginx -c /usr/local/nginx/conf/nginx.conf

停止:nginx -s stop

测试配置文件:nginx -t 

重新加载配置:nginx -s reload

四、配置nginx

方式一
执行编辑命令

vim /etc/nginx/nginx.conf

按 i 键进入编辑方式 ,编辑结束后 按Esc键退出插入模式,然后按 :wq保存退出。
方式二
提前准备好已经配置好了的ngin.conf文件,直接上传到服务器(/etc/nginx/nginx.conf)

1.基础配置

nginx配置文件分为3个模块

请添加图片描述
1.全局配置

作用: 从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
一般只用配置一下 worker_processes,其他的想配置也可以

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

worker_processes  1;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。
events块:
作用: events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

events {
    worker_connections  1024;
}

上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
3.http块:
作用: 这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http全局块、server 块。

http全局块

http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,
该技术的产生是为了 节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。

location 块

一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),
对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,
对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能

请添加图片描述

server配置

listen --监听的端口号
server_name --服务名称(随意取)

location配置
location 后面根 匹配路径,和虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配。比如 location /api/ ,那么url 是http://***/api/uri-string的都会匹配上。

localtion /api/ {
root /home/resources;  ##资源的根路径
 index  index.html index.htm;
}

如果网址是 http://***/api/front/inde.html,则会向客户端返回/home/resources/front/i文件下的index.html

2. 负载均衡

当如果服务以集群的方式进行部署时,那nginx在转发请求到服务器时就需要做相应的负载均衡。其实,负载均衡从本质上来说也是基于反向代理来实现的,最终都是转发请求。
在这里插入图片描述
nginx 负载均衡的配置方式:

upstream webservers{
    server 192.168.100.128:8080;
    server 192.168.100.129:8080;
}
server{
    listen 80;
    server_name localhost;
    
    location /api/{
        proxy_pass http://webservers/admin;#负载均衡
    }
}

**upstream:**如果代理服务器是一组服务器的话,我们可以使用upstream指令配置后端服务器组。

如上代码的含义是:监听80端口号, 然后当我们访问 http://localhost:80/api/…/…这样的接口的时候,它会通过 location /api/ {} 这样的反向代理到 http://webservers/admin,根据webservers名称找到一组服务器,根据设置的负载均衡策略(默认是轮询)转发到具体的服务器。

:upstream后面的名称可自定义,但要上下保持一致。
nginx 负载均衡策略:

名称说明
轮询默认方式
weight权重方式,默认为1,权重越高,被分配的客户端请求就越多
ip_hash依据ip分配方式,这样每个访客可以固定访问一个后端服务
least_conn依据最少连接方式,把请求优先分配给连接数少的后端服务
url_hash依据url分配方式,这样相同的url会被分配到同一个后端服务
fair依据响应时间方式,响应时间短的服务将会被优先分配

具体配置方式:

轮询:

upstream webservers{
    server 192.168.100.128:8080;
    server 192.168.100.129:8080;
}

weight:

upstream webservers{
    server 192.168.100.128:8080 weight=90;
    server 192.168.100.129:8080 weight=10;
}

ip_hash:

upstream webservers{
    ip_hash;
    server 192.168.100.128:8080;
    server 192.168.100.129:8080;
}

least_conn:

upstream webservers{
    least_conn;
    server 192.168.100.128:8080;
    server 192.168.100.129:8080;
}

url_hash:

upstream webservers{
    hash &request_uri;
    server 192.168.100.128:8080;
    server 192.168.100.129:8080;
}

fair:

upstream webservers{
    server 192.168.100.128:8080;
    server 192.168.100.129:8080;
    fair;
}

3.限流配置

限流的作用

限流主要用作安全目的,比如可以减慢暴力密码破解的速率。

通过将传入请求的速率限制为真实用户的典型值,并标识目标URL地址(通过日志),

还可以用来抵御DDOS攻击。更常见的情况,该功能被用来保护上游应用服务器不被同时太多用户请求所压垮。

limit_req zone=myLimit2 burst=5 nodelay;

1). zone=myLimit2:表示用上述声明的哪个配置进行限制,myLimit2与上述声明的名称相对应。

(2). burst=5 :设置一个大小为5的缓冲区,当有大量请求(瞬间爆发)过来时,超过了上述配置的访问频次限制的请求,可以先放到这个缓冲区内。

注:burst的作用是让多余的请求可以先放到队列里,慢慢处理。如果不加nodelay参数,队列里的请求不会立即处理,而是按照rate设置的速度,以毫秒级精确的速度慢慢处理。

(3). nodelay : 设置后,burst缓冲区中排队的请求立即被处理,超过频次限制 并且 缓冲区满了的情况下,直接返回503状态码;如不设置,那么额外的请求将进入等待排队的状态

注:通过设置burst参数,我们可以允许Nginx缓存处理一定程度的突发,多余的请求可以先放到队列里,慢慢处理,不报错,这起到了平滑流量的作用。

但是如果队列设置的比较大,请求排队的时间就会比较长,从用户角度看来就是响应变长了,这对用户很不友好,所以引入nodelay参数。


worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    # 限流配置声明
    limit_req_zone $binary_remote_addr zone=myLimit2:10m rate=1r/s;
    server {
        listen       80;        #监听端口
        server_name  xxx;         #随意配置一个地址即可,优先走代理
        location / {
             limit_req zone=myLimit2 burst=5 nodelay;	#启用限流	 
             proxy_pass http://localhost:7061;   #代理地址
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }  
    }
}

完结·

文章来源:https://blog.csdn.net/weixin_55939638/article/details/135695395
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。