Nginx 反向代理

Nginx 是一个高性能的http 和反向代理服务器,用于把客户端请求分发给后台的web 容器。下载安装的话,可以到官网去下载 安装。

一、配置文件

#工作进程,一般设置为CPU的核数
woker_processes 2
#在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。
worker_cpu_affinity 0001 0010 0100 1000; #(四核)。
#写在main部分。默认是没有设置,可以限制为操作系统最大的限制65535 > 2^16 -1 
worker_rlimit_nofile 10240

events {
    #nginx默认使用epoll事件模型,nginx在Linux操作系统下效率相当高
    use epoll;# epoll [事件模型] > kqueue [类似于epoll的高效事件模型] > select [不支持高效事件模型]
    #每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)
    worker_connections 2048;
    #最大连接数 = worker_processes * worker_connections/4,所以这里客户端最大连接数是1024,这个可以增到到8192都没关系
}

upstream tomcatserver {
     server 192.168.72.49:8081;
     server 192.168.72.49:8082;
     server 192.168.72.49:8080 weight=2;# 分担2/5的请求
     server 192.168.72.49:6060;
     server 192.168.72.49:9090 down;# 暂时不参与负载
     server 192.168.72.49:7070 backup;# 其他主机都宕机时,此服务器启用
 }
server {
    #监听端口,此处监听为访问Nginx的端口,与tomcat端口无关
    listen       80; 
    #监听地址,此处应该在hosts文件中做映射(或者是既定域名),否则无法解析
    server_name  8081.max.com; 
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
        # 请求转向tomcatserver 定义的服务器列表
        proxy_pass   http://tomcatserver;
        index  index.html index.htm;
    }    
        
    # 动静分离 , 可作静态资源服务器
    location /Downloads {
        root   /Users/xuqinxiang/;
        #index  index.html index.htm;
        #以下配置为 允许定义的两个IP访问,其他的都不允许【无特殊要求 不配置】
        allow 192.168.10.100;
        allow 172.29.73.0/24;
        deny all;
    }
    # 浏览器访问: http://localhost:8080/Downloads/111.jpg  即可访问/Users/###/Downloads/下的 111.jpg 【Mac中测试通过】
}

二、流程

  • 浏览器访问8081.max.com,通过本地的 host文件 或者 域名解析,找到 192.168.72.49服务器(这个就是安装并配置Nginx的那台服务器)
  • nginx反向代理接受客户机请求,找到server_name为8081.max.com的server节点,根据proxy_pass对应的http路径,将请求转发到 upstream tomcatserver 上,即端口号为8081的tomcat服务器。
  • 总体就是 请求8081.max.com , tomcat1 接收返回首页(tomcat首页)

三、负载均衡策略

upstream tomcatserver{
      ip_hash; # 负载策略为 ip_hash
      server 127.0.0.1:9090 down; (down 表示当前的server暂时不参与负载)
      server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
}
  • 轮询 :默认
  • ip_hash :同一IP每次请求路由到同一台服务器
  • weight :权重,按比例分配请求,数字越大,所占请求比例越大
  • fair : 第三方负载算法,响应时间短的优先分配
  • url_hash :第三方负载算法,相同请求路由到同一台服务器

四、信号量控制

一般我们在使用Nginx时,常用的命令为:

  • 启动:start nginx 或 nginx

  • 停止: nginx -s stop 或 nginx -s quit

  • 重启:nginx -s reload

我们也可以使用nginx提供的信号量进行控制,使用信号量控制,首先要知道(获取)nginx的进程号[ 包括主进程和工作进程,信号量控制基于主进程 ]。

  • 获取进程号的命令如下:
ps aux|grep nginx

假设获取的进程号为26633,(logs/nginx.pid 文件中为进程号,后面会说明如何基于此文件进行信号量的控制)

  • 立即退出nginx(两种方式)
kill -INT 26633
kill -TERM 26633
  • 优雅的退出(进程空闲时退出)
kill -QUIT 26633
  • 软重启,并加载最新的配置文件
kill -HUB 26633
  • 先重命名原来的日志,并新建日志名(未改之前的名字),使用此命令可以将日志写入新建的日志文件中
kill -USER1 26633
  • USER2 与 WINCH 用于平滑升级的时候使用(这里不做解释)
  • 如果不想每次都要先查看进程号,可以使用如下命令,以退出为例
kill -QUIT 'cat logs/nginx.pid'

五、日志按日期分割

有时候我们的日志记录的数据比较多,一天的日志可能就非常大,如果不进行日志分割的话,排查问题会很困难。我们可以使用以下方式,自动进行日志的切割。

  • 编写shell脚本 -runlog.sh
#日志路径
LOGPATH=/usr/local/nginx/logs/logName.log
#备份日志路径
BASEPATH=/usr/local/nginx/data
bak=BASEPATH/$(date -d yesterday +%Y%m%d).logName.log  #20190730
#echo $bak
mv $LOGPATH $bak
touch $LOGPATH
kill -USER1 cat /usr/local/nginx/logs/nginx.pid
  • 定时器设定
crontab -e
*/1 * * * * sh /usr/local/nginx/runlog.sh #cron定时+ 脚本文件
  • 执行shell脚本,即可每分钟执行一次。根据日志情况,我们可以设置每天、每周、每月 进行分割

六、location 定位

语法规则:location = [ =|~|~*|^~ ] /uri/{...}

  • =开头表示精准匹配
  • ^~开头表示uri以某个常规字符串开头,理解为匹配的URL路径即可。nginx不对URL做编码,因此请求为/static/20%/aa,可以被规则 ^~/static/ /aa匹配到(注意,/ /中间是空格)
  • ~开头表示区分大小写的正则匹配
  • ~*开头表示不区分大小写的正则匹配
  • !~ 和 !~* 分别为 区分大小写不匹配 及 不区分大小写不匹配 的正则
  • / 通用匹配,任何请求都会被匹配到

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值