欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx实现负载均衡

程序员文章站 2024-01-31 23:10:58
...

LinuxNginx的启动和关闭命令:

  1. nginx程序启动命令:/nginx/sbin/nginx

  2. 通过信号量来关闭Nginx进程:kill -INT [PID],注意这是Nginx主进程的PID号

  3. 如果你不想总是查看进程号,可以使用如下命令:kill -INT 'cat logs/nginx.pid' 

Nginx信号控制命令:

  1. 停止nginx程序:/nginx/sbin/nginx -s stop

  2. 退出nginx程序:/nginx/sbin/nginx -s quit

  3. 重新打开nginx配置文件:/nginx/sbin/nginx -s reopen

  4. 重新加载配置文件:/nginx/sbin/nginx -s reload

Nginx配置文件的说明:

 

worker_processes 1; //表示有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU。一般设置为CPU数*核数
event{
  worker_connections:1024; //这是指一个子进程最大允许连接数
}
http{
  server{
     listen 80; //监听端口号
     server_name localhost; //监听域名
  }
  location / {
     root html;
     index index.html index.htm;
  }
}

设置Nginx的日志信息格式:

 

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

写一个shell脚本,实现日志的切割,则脚本文件runlog.sh里面的代码如下:

 

LOGPATH=/usr/local/nginx/logs/z.com.access.log
BASEPATH=/data/$(date -d yesterday +%Y%m)
mkdir -p $BASEPATH
bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).z.com.access.log
mv $LOGPATH $bak
touch $LOGPATH
kill -USR1 [PID]  #重新载入日志文件

 

运行shell脚本的命令为:sh runlog.sh

 

然后基于Linux下的crontab写一个定时器,让runlog.sh定时执行:

 

crontab -e // 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
*/1 * * * * sh /data/runlog.sh // 每隔一分钟执行runlog.sh文件

参考链接为:http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html

 

Location详解之精准、一般、正则匹配如下:

 

localtion = / {
  root /usr;
  index index.html;
}
localtion / {
  root /usr;
  index index.html;
}
localtion ~ image {
  root /usr;
  index index.html;
}

 

如果我们访问 http://xxx.com/image/logo.png,此时,一般匹配当中的“/”与“/image/ logo.png”匹配;同时,正则匹配当中的“image”与“/image/logo.png”也能匹配,那么谁能发挥作用呢?正则优先级更高,所以正则会发挥作用。

 

nginx反向代理+负载均衡

  1. nginx支持两种用法,一个是proxy,另一个是upstream,分别用来做反向代理和负载均衡;

  2. 以反向代理为例,nginx不自己处理Ajax的相关请求,而是把Ajax的相关请求转发给apache来处理;

 

 

Nginx实现负载均衡

图表示的是传说中的“动静分离”,动静分离不是一个严谨的说法,叫反向代理更规范。

  • 反向代理后端如果有多台服务器,自然可形成负载均衡,但proxy_pass不能指向多台服务器;把多台服务器用up_stream指定绑定在一起,并起个组名,然后用proxy_pass指向改组。

  • 默认的负载均衡的算法很简单,就是针对后端服务器的顺序逐个请求。也有其他负载均衡算法,如一致性哈希,需要安装第三方模块。以安装ngx_http_upstream_consistent_hash为例。

 

Nginx高并发思路导图:

Nginx实现负载均衡

新建一个sys_opt.sh,并加入相应的脚本进行运行优化socket系统层面,文件内容如下:

 

echo 50000 > /proc/sys/net/core/somaxconn
echo 1 > /proc/sys/net/ipv4/tcp_tw_recyle
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 0 > /proc/sys/net/ipv4/tcp_syncookies

注意:对于高并发网站中,应将nginx配置文件当中的keepalive_timeout值设为0,这样有利于http连接的快速地回收利用。