LNMP架构(五)

一 Nginx负载均衡

    一台代理服务器代理多台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端口

二 ssl原理

    给数据加密,以防在传输过程被人抓包后盗取信息,若是加密的话,即便被抓包也解密不了

一、请求

    浏览器发送一个https的请求给服务器;  

二、证书

    服务器要有一套数字证书,能够本身制做(后面的操做就是阿铭本身制做的证书),也能够向组织申请,区别就是本身颁发的证书须要客户端验证经过,才能够继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;  公钥用于加密,私钥用于解密

三、传输公钥

    服务器会把公钥传输给客户端;  

四、浏览器验证公钥合法性并生成随机数串

    客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;  

五、传输随机字符串

    客户端把加密后的随机字符串传输给服务器;  

六、加密数据

    服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>经过某种算法混合在一块儿,这样除非知道私钥,不然没法获取数据内容);  

七、传输数据

    服务器把加密后的数据传输给客户端;  

八、解密数据

    客户端收到数据后,再用本身的私钥也就是那个随机字符串解密;

三 生产ssl密钥对

    咱们这里在本机制做一个密钥对

一、安装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个文件了

四 Nginx配置SSL

一、建立虚拟主机的配置文件

        #  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

相关文章
相关标签/搜索