Nginx配置-反向代理、负载均衡

近期学习Nginx的学习笔记和配置

所有知识点来自bilibili的尚硅谷的Nginx课程。

一、基础命令

1.1 nginx常用命令[前提:nginx根目录下/sbin]

  • 查看版本
[root@host-16f8f3e6391 sbin]# ./nginx -v
  • 启动nginx
[root@host-16f8f3e6391 sbin]# ./nginx
  • 关闭nginx
[root@host-16f8f3e6391 sbin]# ./nginx -s stop
  • 重新加载nginx[不重启nginx,更新配置后,相当于热加载新配置]
[root@host-16f8f3e6391 sbin]# ./nginx -s reload

以上配置完成后,ngnix已完成基本配置,以下是nginx配置(包括反向代理、负载均衡、动静分离、高可用)

二、配置

2.1 /usr/nginx/conf/nginx.conf配置文件

第一部分 全局块【文件中events之前的部分,主要设置影响nginx整体运行的配置指令】

worker_processes 1; #worker_processes值越大,可以支持的并发处理量越多

第二部分 events块【涉及的指令主要影响Nginx服务器与用户的网络连接】

worker_connections 1024; #worker_connections,可以支持的最大连接数,在项目中需要灵活变化的部分

第三部分 http块【Nginx服务器中配置最频繁部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置在这里】

  1. http的全局块【文件引入、MIME—TYPE定义、日志自定义、连接超时时间、单链接请求数上限等】
  2. http的server块

2.2 反向代理-配置实例

Nginx配置实例-反向代理

  • 需求1:浏览器中输入:www.123.com,跳转到服务器上部署并已经启动了的tomcat欢迎页
# windows访问Internet资源,先在本地host(一般在C:/Windows/System32/drivers/etc/)文件中找访问的域名对应的ip,找不到就去查网络中DNS服务器上的域名对应的ip
# 在nginx配置文件中:
# 修改http块中的server块中的server_name ip(Nginx所在ip)
server{
    listen 80;
    server_name 192.168.0.1
    ...
    location / {
        root html;
        #加上下面这行,访问192.168.0.1时,就会自动转发到tomcat的http://127.0.0.1:8080
        proxy_pass http://127.0.0.1:8080;
        index index.html index.htm;
    }
    ...
}
#开放用到的端口
  • 需求2:Nginx监听9001端口,根据相同顶级域名下访问不同的路径转发到不同的tomcat中去
#例如访问http://192.168.0.1:9001/edu转发到127.0.0.1:8080
#例如访问http://192.168.0.1:9001/pro转发到127.0.0.1:8001
server{
    listen 9001;
    server_name 192.168.0.1
    ...
    location ~ /edu/ {
        #加上下面这行,访问192.168.0.1:9001/edu/时,就会自动转发到tomcat的http://127.0.0.1:8080
        proxy_pass http://127.0.0.1:8080;
    }
    location ~ /pro/ {
        #加上下面这行,访问192.168.0.1:9001/pro/时,就会自动转发到tomcat的http://127.0.0.1:8081
        proxy_pass http://127.0.0.1:8081;
    }
    ...
}
#开放用到的端口
  • 【说明】:location中的~ ~* ~~ = 四种参数说明:
  1. ~用于表示url中包含区分大小写正则表达式。
  2. ~*用于表示url中包含不区分大小写正则表达式。
  3. ~~用于不含正则表达式的url前,要求Nginx服务器找到标识url和请求字符串匹配度最高的location后,立即使用location处理请求,而不再使用location块中的正则url和请求字符串做匹配。
  4. =用于不含正则表达式的url前,要求请求字符串与url严格匹配。

2.3负载均衡-配置实例

  • 需求1:客户端请求http://192.168.0.1/edu/a.html,所有请求均匀分到127.0.0.1:8080和127.0.0.1:8081
#例如访问http://192.168.0.1/edu/a.html均匀转发到127.0.0.1:8080和127.0.0.1:8001
在http块中,和server平级加入upstream块,表示【负载均衡】,其中myserver时服务名称,相当于用myserver来代替了两个真实域名
http{
    ...
    upstream myserver{
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
    }
   server{
       listen 80;
       server_name 192.168.0.1
       ...
       location / {
           #加上下面这行,访问192.168.0.1:9001/edu/a.html时,就会自动转发到tomcat的http://127.0.0.1:8080和127.0.0.1:8001
           proxy_pass http://myserver;
           root html;
           index index.html index.htm;
       }
    }
       ... 
}
#开放用到的端口
  • 【注意】:负载均衡的几种分配服务的策略
  1. 轮询【默认】:每个请求按时间顺序逐一分配到不同的后端服务器中,如果后端服务器宕机,能自动剔除。【简单来讲:平均分配】
  2. weight:权重,默认为1,权重越高,被分配客户端越多。【直接指定权重高的被访问几率更大】upstream myserver{server 127.0.0.1:8080 weight=1;server 127.0.0.1:8081 weight=9;}
  3. ip_hash:每个请求访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。【相当于固定了,变相不用考虑分布式条件下session一致性问题】upstream myserver{ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8081;}
  4. fair(第三方):按后端服务器响应时间来分配请求,响应时间短的优先分配。【类似于实例中,8080和8081哪个先访问到,就请求哪一个】upstream myserver{server 127.0.0.1:8080; server 127.0.0.1:8081;fair;}

2.4 动静分离

  • 需求:根据访问后缀名的不同,将动态请求和静态请求分发到不同的服务器中
#location 后面/www/和/image/分别代表动态请求资源和静态请求资源,达到动静分离的效果
http{
    ...
   server{
       listen 80;
       server_name 192.168.0.1
       ...
       location /www/ {
           #请求示例:192.168.0.1/www/a.html
           proxy_pass http://myserver;
           root /data/;
           index index.html index.htm;
       }
        location /image/ {
           #autoindex on;的作用,访问的时候列出文件的目录结构
           #请求示例:192.168.0.1/image/a.jpg
           proxy_pass http://myserver;
           root /data/;
           autoindex on;
       }
    }
       ... 
}
#开放用到的端口

三、Nginx的高可用配置(需要keepalived,正在学习,暂不参考)

  • 3.1 问题:当Nginx宕机后,整个服务将不可用,这个时候解决办法是:一台Nginx当主服务器,配置一台Nginx从服务器,使用keepalived来达成。
#keepalived 会给nginx一个供外部访问的虚拟ip
  • 3.2 两台Nginx服务器(ip:192.168.0.1 192.168.0.2),在两台服务器上安装keepalived。
#需要连接网络,安装后默认在/etc/keepalived/里
yum install keepalived -y
#修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
#可以网上拷贝

#编写检测Nginx是否还活着的脚本文件
vim check.sh

#! /bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi
#保存退出
  • 3.3启动nginx和keepalived
./nginx
systemctl start keepalived.service
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值