Nginx配置学习总结

在b站学习nginx时做的笔记,没有实践,可能有误(^ … ^)

在Ubuntu中安装Nginx:apt install nginx

结构示例,在宝塔中默认的Nginx配置文件在这里插入图片描述

location后面有个~符号代表使用正则表达式,后面就开始接正则表达式进行匹配请求

配置反向代理

公网服务器有公网地址18.18.18.18:80,也有私网地址192.168.1.1,与公网服务器处在同一个内网下的主机192.168.1.2:8080存放教育网页面,主机192.168.1.3:8080存放淘宝网页面。客户端浏览器请求http://18.18.18.18:80/edu/,公网服务器匹配请求,然后将请求转发到192.168.1.2:8080上。客户端浏览器请求http://18.18.18.18:80/taobao/,公网服务器匹配请求,然后将请求转发到192.168.1.3:8080上。(注意防火墙规则,要放行80、8080端口)

# 在http块中添加以下虚拟主机
server {
    listen     18.18.18.18:80;  # 虚拟主机监听该地址
    location ~ /edu/ {  # 匹配教育网的请求
        proxy_pass http://192.168.1.2:8080;  # 将请求转发到内网的192.168.1.2主机
        index index.html;
    }
    location ~ /taobao/ {  # 匹配淘宝网的请求
        proxy_pass http://192.168.1.3:8080;  # 将请求转发到内网的192.168.1.3主机
        index index.html;
    }
}

配置负载均衡

公网服务器有公网地址18.18.18.18:80,也有私网地址192.168.1.1,与公网服务器处在同一个内网下的主机192.168.1.2:8080存放页面,主机192.168.1.3:8080存放页面。客户端浏览器请求http://18.18.18.18:80/,公网服务器匹配请求,然后将请求随机转发到192.168.1.2:8080或者192.168.1.3:8080上。(注意防火墙规则,要放行80、8080端口)

# 在http块中添加以下内容
upstream myserver{  # 负载均衡的基本配置
    server 192.168.1.2:8080 weight=1;  # 声明负载均衡服务器地址和权重
    server 192.168.1.3:8080 weight=3;  # 每有4个请求,就有1个去192.168.1.2,有3个去192.168.1.3
}

server {
    listen     18.18.18.18:80;  # 虚拟主机监听该地址
    location / {  # 匹配请求
        proxy_pass http://myserver;  # 应用到负载均衡配置中(myserver是上面配置负载均衡的名字)
        index index.html;
    }
}
负载均衡分配策略
  • 轮询(默认):每个请求按照时间顺序逐一分配到后台服务器,如果某一个后台服务器down掉,能自动剔除该服务器。
upstream myserver{
    server 192.168.1.2:8080 ;
    server 192.168.1.3:8080 ;
}
  • weight权重:权重越高被分发到的请求越多。这种情况一般是服务器性能不均的情况下使用。
upstream myserver{
    server 192.168.1.2:8080 weight=1;
    server 192.168.1.3:8080 weight=3;
}
  • ip_hash:对请求的客户端IP地址进行哈希运算,运算结果匹配某一台服务器。结果是该IP所有请求都会到对应的一个服务器,这样解决了session会话的问题,但也可能出现了某一台服务器压力过大的问题。(要求nginx服务器接收用户访问时要在最前端,否则就会出现接收的IP都是代理服务器的地址)
upstream myserver{
    ip_hash ;
    server 192.168.1.2:8080 ;
    server 192.168.1.3:8080 ;
}
  • fair:根据后端服务器的响应时间来分配请求,响应速度快的优先分配。
upstream myserver{
    server 192.168.1.2:8080 ;
    server 192.168.1.3:8080 ;
    fair ;
}

配置动静分离

类似要操作数据库的页面就是动态请求,处理动态请求要消耗大一点的资源;类似请求html、css、js、jpg等文件就是静态请求,这样的请求消耗的资源相对较小。为了节约处理动态请求的服务器资源,为了方便管理资源,配置动静分离。如果是动态请求就分发到处理动态页面的服务器,如果是静态请求就分发到存储静态资源的服务器。

配置动静分离的目的就是减少服务器的压力,同时还可以通过其它方面的配置缓解服务器压力。expires参数可以配置资源在客户端浏览器中的过期时间,由客户端缓存页面资源,并检查过期时间,比如参数设置了3d,代表过期时间为3天,这三天内,请求该页面资源时会比对服务器该页面的最后修改更新时间,如果有变化就直接从服务器拉取页面资源(返回状态码200),如果没变化(返回状态码304)就使用浏览器缓存的页面资源,如果过期了就重新请求。

# 在http块中添加以下虚拟主机
server {
    listen     18.18.18.18:80;  # 虚拟主机监听该地址
    location ~ /php/ {  # 匹配动态请求
        proxy_pass http://192.168.1.2:8080;  # 将请求转发到内网的192.168.1.2主机
        index index.html;
    }
    location ~ /image/ {  # 匹配静态请求
        proxy_pass http://192.168.1.3:8080;  # 将请求转发到内网的192.168.1.3主机
        index index.html;
        expires 3d;  # 过期时间
        # autoindex on;  # 访问该http://192.168.1.3:8080/image/时就会列出目录结构
    }
}

配置高可用

nginx服务器有可能宕机,要配置一个备份的nginx服务器。使用keepalived软件做高可用,维护管理主从nginx服务器,自动检查和切换可用的nginx服务器。

每个Nginx服务器都安装keepalived软件,在keepalived软件中配置虚拟IP,如果在路由交换中学过vrrp协议,那就很容易弄懂keepalived高可用配置原理。在路由交换中配置高可用时,在核心层的两台三层交换机上的vrrp协议中都配置相同的一个虚拟IP地址,同时两台三层交换机都是互通的,当内网下的主机要进行路由访问外网时,主机的网关是使用该vrrp的虚拟地址,所以无论数据走任何一个三层交换机是可以由虚拟地址转发出去,当任意一台三层交换机down掉时,另一台三层交换机可以继续路由;还可以对vrrp协议设置优先级,优先走哪边的三层交换机。类似keepalived软件,将nginx服务器想象为三层交换机,那么就很容易理解了。

安装配置参考:https://blog.csdn.net/lihao1155/article/details/105179619

Ubuntu安装keepalived:apt install keepalived,然后在/etc/目录下有个keepalived目录,里面是空的,要手动创建配置文件和修改。vim /etc/keepalived/keepalived.conf,里面写入如下内容

global_defs {
        router_id 192.168.1.1  # nginx服务器的地址,也就是下面eth0网卡的地址
}
vrrp_script chk_http_port {
    script "/etc/keepalived/check.sh"
    interval 2 #(检测脚本执行的间隔)
    weight -20  # 如果某服务器down掉,权重减20,那么数据优先走另一个服务器
}
vrrp_instance VI_1 {
    state MASTER  # 主服务器是 MASTER,备份服务器是BACKUP
    interface eth0 # 网卡名称,可以通过ifconfig查看
    virtual_router_id 51 # 主、备机服务器的 virtual_router_id 必须相同
    priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小,用于区分主从服务器
    advert_int 1  # 心跳机制,每隔1秒检测一次
    authentication {
        auth_type PASS  # 权限校验方式PASS
        auth_pass 1111  # 密码为111
    }
    virtual_ipaddress {
        18.18.18.18  # VRRP虚拟地址。可以绑定多个虚拟地址
    }
}

再在同一个目录下创建检测脚本文件(上面出现过)vim check.sh,里面写入如下内容

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`      ## 查看是否有 nginx进程 把值赋给变量A 
if [ $A -eq 0 ];then                    ## 如果没有进程值得为 零
       service keepalived stop          ## 则结束 keepalived 进程
fi

最后给 check.sh 文件执行权限 chmod 777 check.sh

在启动nginx的基础上启动keepalived:systemctl start keepalived.service,如果执行ifconfig命令可以看到虚拟地址

测试,使用18.18.18.18访问http服务

Nginx原理

启动nginx后查看进程,可以看到有两个进程,一个是master,一个是worker。nginx是可以一个master进程,多个worker进程。
在这里插入图片描述
有请求时,master接收到请求,多个worker进程争抢运行,抢到的worker进程进行资源操作(反向代理、负载均衡、动静分离等),每个worker是独立、互不影响的,当进行nginx -s reload命令进行热部署时,正在工作的worker进程继续按照原先的设定工作,而其它悠闲的worker进程就会关闭,然后重新按照配置启动关闭的进程,之前工作的 worker进程运行任务结束后也关闭,然后也重新按照配置启动进程。

worker个数最好和cpu核心数一样多,worker使用I/O多路复用异步非阻塞的方式运行,所以运行很快,但在Windows操作系统上就不能使用该方式运行,所以最好使用Linux作为nginx服务器。

连接数worker_connection

  • 当发送一个请求时,占用了worker2个或4个连接数,取本地静态资源时,接收和响应占用2个连接;取动态资源时,请求数据库和接收数据库又占用2个连接。
  • 有3个worker进程时,每个worker的worker_connection值为1024,那么并发数为(3x1024)/2或者(3x1024)/4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值