跳过正文
  1. 博客/
  2. 后端/
  3. 软件/

ansible管理nginx负载均衡

·4 分钟· ·
后端 软件
目录

前言
#

因为手头自己有三个服务器,所以想折腾一下负载均衡。

两个CentOS,一个Ubuntu,都是比较新的。

一开始准备用haproxy来做负载均衡服务器,因为haproxy相比与nginxcookiesession支持比较好,但是由于两个原因还是放弃了。

  1. 服务器被阿里云封掉

简单的在haproxy中设置后端服务器后,过一段时间就显示强制备案页面,由于我的域名没有备案。

后来我翻看了nginx日志发现,haproxy默认在request header里面带了X-Host,被阿里云发现了,这里提供一个解决方法

	# 删除掉你header里面的 Host
  
    # 在backend里面添加一句
  
    http-request del-header Host
  

然而nginx里面默认是没有添加Host这个的,要你在localtion中添加两句,如下面

	server {
  
listen 80;
  
server_name example.com;
  
 location / {
  
	proxy_pass       http://main;
  
	proxy_set_header Host            www.example.com; # add Host
  
 	proxy_set_header X-Forwarded-For $remote_addr; # add X-Forwarded
  
 }
  
}
  
  1. haproxy支持多开

我试了很多种选项,确定pidfile、改变uidgid等等,haproxy似乎可以允许很多个相同进程绑定同一个端口,虽然可以通过pid来写一套类似service管理的脚本,但终归很麻烦

我看网上有人写了这个脚本,但是nginx自带了,还是用nginx比较好,而且ansibleservice的交互还不错。

nginx负载均衡
#

nginx负载均衡是通过反向代理来实现的,也就是把一台服务器的压力分摊到多台上面

要想实现这个必须要有后端服务器,假设我们有一台后端服务器1.1.1.1,在代理主机的nginx配置系统location里面只要添加一条proxy_pass就行了

	server {
  
listen 80;
  
server_name example.com;
  
location / {
  
    proxy_pass http://1.1.1.1;
  
}
  
}
  

上面只是简单的实现了一个反向代理的功能,当你有一个后端服务群的时候,你就要使用负载均衡模块了,负载均衡模块在nginx配置特别简单,添加一个upstream模块,把服务器ip或者域名放到里面

upstream webservers{
  
	server 1.1.1.1 weight=10;
  
	server my.domain.com  weight=10;
  
	
  
}
  

然后修改proxy_pass后的为http://webservers就行了

ps: nginx对于后端反向代理服务器有个max_failsfail_timeout属性,你要是设定了一个max_fails次数,你代理服务器拿取失败了几次就会在fail_timeout值之后尝试,和haproxyretry属性差不多,但是似乎haproxyretry不好使,我故意使用两个错误ip和正确ip,结果nginx能一直正确返回正确ip响应,而haproxy有时候能,有时候不行。

nginx错误日志
#

在调试nginx碰到一些错误,记录一下如何系统的解决方法

  • 调用service nginx start失败

首先看给的错误信息,假如让你看systemctl status nginx.servicejournalctl -xn,输入去看

  1. 格式错误(format error)

一般你写的nginx的配置文件有问题,这时候可以用nginx -t检查格式,修改正确后会显示success

  1. 无法绑定地址(bind error)

一般是因为有别的应用程序占用端口造成的,这时候用netstat -tulpn检查端口,然后选择kill掉占用端口的程序或者换一个端口

ansible playbook 编写
#

具体代码可以参考nginx均衡负载ansible-playbook
首先你得写一个hosts

[ali]
  
my ansible_ssh_host=1.1.1.1 ansible_ssh_user=root 
  
[tencent]
  
main ansible_ssh_host=1.1.1.2 ansible_ssh_user=root
  
[digital]
  
google ansible_ssh_host=1.1.1.3 ansible_ssh_user=root
  

前面[ ]包着的是组名,最前面的mymaingoogle别名,后面就是ip和用户名了。

写完hosts后要写两个nginx配置文件一个代理服务器的配置文件和一个后端服务器配置文件,playbook很简单就是复制nginx配置文件和重启nginx

---
  
- hosts: tencent
  
  remote_user: root
  

  
  tasks:
  
  - name: copy nginx config file 
  
    template: src=~/test/lunge_proxy.conf  dest=/etc/nginx/conf.d/lungelog.conf
  
    notify: restart nginx
  

  
  handlers:
  
  - name: restart nginx
  
	service: name=nginx state=restarted enabled=yes
  

解释一下notify,在复制完成之后就启用一个handler完成nginx的重启,当然这里也可以使用reload,假如在生产环境的话。

客户端和代理的playbook差不多就不多介绍了。

引用
#

nginx的配置、虚拟主机、负载均衡和反向代理

相关文章

git 工作流程
·3 分钟
后端 软件
git是当今流行的版本控制工具,一般我们可能只要会push, pull就可以了, 但是当我们同别人共同工作的时候,我们必须要了解git协同开发的一些重要流程.
GitHub Education Pack
·3 分钟
后端 软件
GitHub推出一个对学生和教师的福利包,对于学生来说这是一个不小 的福利,只要通过一个edu邮箱就可以领取,但奈何国内有些无良人买卖 邮箱,所以GitHub对于.cn的邮箱一律拒绝,但是可以通过上传学生证的方法 得到验证,题主刚开始用学校邮箱试了试,失败了,抱着试一试的心态,上传了 学生证,没想到第二天就给我回复,并给我这个豪华大礼包,接下来我就介绍介绍 如何用这个包来.
在Linux下玩转Vim
·3 分钟
后端 软件
学了鸟哥的书前面基础后,突然想在Linux下用gcc玩C语言,然后了解到了Vim这个神一样的编译器,接下来经过超长时间虐心的安装无数插件无数依赖包,突然有种打自己一顿的感觉,还好终于把Vim装的和VS差不多了,接下来我介绍我安装Vim的经验吧。 # 我虚拟机下的Linux原来是红旗6的,但是我改了一下yum的包源成CentOS的并且全部update一下后就神奇的变成了CentOS6,虽然他们两个是同一家公司,但是总给我一种由盗版成了正版的感觉。。 # 闲话不多说,刚开始装第一个插件是Ctags # 刚开始装的时候我是在X-Windows里面的这里下载再转回shell敲
富文本编辑器CKEditor配置CKFinder
·3 分钟
后端 软件
由于网站要实现图片和文字的混排的上传 所以在网上找了富文本编辑器的插件,发现CKEditor这款还不错的插件
有用的几个Shell命令
·1 分钟
后端 软件
管线命令 (pipe): # 撷取命令: cut, grep 排序命令: sort, wc, uniq 双向重导向: tee 字符转换命令: tr, col, join, paste, expand 分割命令: split 参数代换: xargs 分割文档 # 长长的一大片文档有时我们并不愿意看到全部内容,我们只想关注 部分内容的时候了可以考虑使用分割文档命令
阿里云服务器初体验
·1 分钟
后端 软件
申请了一个阿里的15体验的云服务器,同自己玩的虚拟机还是有点不同的。 # 1.用户名和密码 # 找了半天没有找到那个是用户名,试了实例的id,没有用,最后终于在登录帮助名里面找到了,用户名竟然是root!!!!,我用的是Ubuntu系统,说好的Ubuntu不提供root权限的呢,阿里还真会改造Linux系统 ,但是我觉得用root登录还是不安全,我觉得新建一个用户吧