一台代理服务器代理多台web服务器就能够构成负载均衡php
一、查询某个域名绑定的几个IP
首先可使用如下方法查看某个域名对应的IPhtml
# yum install -y bind-utils //若是没有安装dig命令,须要先安装前端
# dig qq.com //查询qq.com这个域名绑定的IPlinux
# dig ask.apelearn.com //查询ask.apelearn.com这个域名绑定的IPnginx
也可使用如下方法查看某个域名对应的IPweb
# ping qq.com //此处反馈的IP不一样于前面反馈的IP,算法
# ping ask.apelearn.comvim
在上面的实验中咱们查询到qq.com的两个IP,下面的实验中咱们就使用这两个IP来做为nginx负载均衡服务器的后端链接的WEB服务器IPwindows
二、建立并编辑负载均衡服务器配置文件后端
# vim /usr/local/nginx/conf/vhost/load.conf
在上述配置文件中加入如下内容:
upstream qq //这里使用到了upstream模块,后面的内容中能够定义多个web服务器ip,qq是upstream的名字,能够随便起
{
ip_hash; //使同一个用户始终保持在一个IP上,不然可能出现同一用户在不一样服务器登录情况不一致的状况
server 61.135.157.156:80; //端口 80时,80能够省略
server 14.17.32.211;
}
server
{
listen 80;
server_name www.qq.com;
location /
{
proxy_pass http://qq; //这里的qq应写的是IP,但由于有多个IP,所以使用的是upstream模块后面跟的名字qq
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
三、加载前的对比测试
咱们来测试下,在配置文件生效前咱们访问www.qq.com的结果
# curl -x127.0.0.1:80 www.qq.com
能够看到访问的结果是访问到了咱们本身服务器上的默认页面
四、检查语法错误并从新加载配置文件
# /usr/local/nginx/sbin/nginx -t
# /usr/local/nginx/sbin/nginx -s reload
五、再次测试验证
如今咱们再来访问www.qq.com,能够看到结果成功访问到了qq.com
# curl -x127.0.0.1:80 www.qq.com
六、注意点
nginx不支持代理https,也就是说使用nginx做代理服务器时,不能访问后端web服务器的443端口,若是遇到前端用户使用https访问时,能够在代理服务器配置访问web服务器的80端口
给数据加密,以防在传输过程被人抓包后盗取信息,若是加密的话,即便被抓包也解密不了
一、请求
浏览器发送一个https的请求给服务器;
二、证书
服务器要有一套数字证书,能够本身制做(后面的操做就是阿铭本身制做的证书),也能够向组织申请,区别就是本身颁发的证书须要客户端验证经过,才能够继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥; 公钥用于加密,私钥用于解密
三、传输公钥
服务器会把公钥传输给客户端;
四、浏览器验证公钥合法性并生成随机数串
客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
五、传输随机字符串
客户端把加密后的随机字符串传输给服务器;
六、加密数据
服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>经过某种算法混合在一块儿,这样除非知道私钥,不然没法获取数据内容);
七、传输数据
服务器把加密后的数据传输给客户端;
八、解密数据
客户端收到数据后,再用本身的私钥也就是那个随机字符串解密;
咱们这里在本机制做一个密钥对
一、安装openssl
# yum install -y openssl-1.0.2k-8.el7.x86_64 //安装openssl命令的包
# rpm -qf `which openssl` //若是安装过的,也能够查看openssl命令是由哪一个包安装的
二、切换目录
# cd /usr/local/nginx/conf/ //咱们将密钥对存放到这个目录下
三、生成私钥
# openssl genrsa -des3 -out tmp.key 2048
上述命令表达的意思是生成rsa格式的生成长度为204八、名字为tmp.key的私钥
而后输入密码就生成私钥成功
四、取消密码
生成密钥必须要指定密码,可是使用密码很麻烦,咱们不能在nginx配置文件中指定密码,每次在浏览器中输入密码不现实,所以须要去掉密码,
# openssl rsa -in tmp.key -out lijie.key //-in指定被转换的密钥文件,-out指定转换后输出的密钥文件,其实转换先后的文件内容是同样的,只是转换前有密码,转换后没有密码
五、删除带密码的密钥文件
# rm -f tmp.key
六、生成证书请求文件
生成证书请求文件,须要拿这个文件和私钥一块儿生产公钥文件
# openssl req -new -key lijie.key -out lijie.csr
要求输入如下信息:
七、生成公钥
利用上一步生成的证书请求文件来生成公钥
# openssl x509 -req -days 365 -in lijie.csr -signkey lijie.key -out lijie.crt
上述命令表示,证书有效期1年,这里的lijie.crt就是公钥
下面咱们能够查询到目前为止已经有3个文件了
一、建立虚拟主机的配置文件
# vim /usr/local/nginx/conf/vhost/ssl.conf
在配置文件中加入如下内容:
server
{
listen 443;
server_name lijie.com;
index index.html index.php;
root /data/wwwroot/lijie.com;
ssl on; //开启ssl,支持https
ssl_certificate lijie.crt; //指定公钥
ssl_certificate_key lijie.key; //指定私钥
ssl_protocols TSLv1 TSLv1.1 TSLv1.2; //指定协议
}
二、建立lijie.com域名对应的目录
# mkdir /data/wwwroot/lijie.com;
三、从新编译nginx使其支持ssl
当咱们来测试-t语法错误时,提示第七行的ssl找不到对应的位置:
这是由于咱们再编译安装nginx时没有指定支持ssl,只指定了很是简单的安装路径,以下图:
这时咱们就须要从新编译nginx的源码包
首先切换到nginx源码包目录下
# cd /usr/local/src/nginx-1.12.1
随后咱们能够查看下包含ssl参数的模块有哪些
# ./configure --help |grep -i ssl
其中--with-http_ssl_module就是咱们须要加上的模块,接下来咱们就来从新编译安装nginx
# ./configure --prefix=/usr/local/nginx --with-http_ssl_module
# make
# make install
四、检查语法错误
# /usr/local/nginx/sbin/nginx -t
五、重启nginx服务
由于从新编译安装过nginx,全部须要重启一下nginx服务
# /etc/init.d/nginx restart
六、检查ssl监听的端口
# netstat -lntp //能够看到443端口已经被监听
七、建立测试文件
# vim /data/wwwroot/lijie.com/index.html
在文件中加入如下内容
八、测试验证
# curl -x127.0.0.1:443 https://lijie.com/
以上这种方法访问是不对的,若是要直接访问,须要像如下这样操做
# vim /etc/hosts //在hosts配置文件中加入下图一行
# curl https://lijie.com/ // 应该使用这种方式访问
上面提示证书不可信任是由于咱们的证书是本身颁发的,但其实是配置成功了的,咱们能够在windows上来实验一下
首先须要在windows的host文件中配置,查找host配置文件的路径为C:\Windows\System32\drivers\etc\hosts 并在配置文件中加入虚拟机的IP 及配置ssl访问的网站域名
而后在linux中配置iptables打开443端口的防火墙
# iptables -I INPUT -p tcp --dport 443 -j ACCEPT
或者清空防火墙规则# iptables -F
如今咱们到浏览器输入网站https://lijie.com便可访问到网站内容,若是浏览器出现连接不安全,就须要咱们收到点击信任连接,便可访问到网站,以下图:
以上是经过咱们本身生成证书来访问的状况,在实际生产环境中,咱们须要去申请权威证书,好比沃通
推荐连接 针对请求的uri来代理 http://ask.apelearn.com/question/1049 根据访问的目录来区分后端的web http://ask.apelearn.com/question/920 nginx长链接 http://www.apelearn.com/bbs/thread-6545-1-1.html nginx算法分析 http://blog.sina.com.cn/s/blog_72995dcc01016msi.htm