阿里-马云的学习笔记

导航

Nginx专题(四)-----https、nginx高可用

公钥和私钥

概念

 

 

 

 

交互过程

浏览器使用公钥,把数据加密后,再发送出去。经过公钥加密内容,只有有私钥的人(nginx服务器)才看得懂。

 

 

nginx配置https

nginx配置https的时候,需要两个东西:(此两样需购买)。一个key,私钥。放在nginx服务器里面,仅此一份;一个证书,公钥,供浏览器去下载。

创建服务器私钥-----创建的证书生产环境是不能使用的,只能当做自己试验

进入目录/etc/nginx/conf.d/,生成的证书都放在这里。

1、创建服务器私钥,命令会让你输入一个口令: 

openssl genrsa -des3 -out server.key 1024

2、创建签名请求的证书(CSR): 

openssl req -new -key server.key -out server.csr

3、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令: 

openssl rsa -in server.key -out server_nopass.key

4、最后标记证书使用上述私钥和CSR: 

openssl x509 -req -days 365 -in server.csr -signkey server_nopass.key -out server.crt

环境要求

先查看nginx版本信息,命令:

nginx -V

 

有--with-http_ssl_module,表示安装了https模块。否则需要重新安装。 

配置

 

server {
    listen       443 ssl;
    server_name  sales.enjoy.com;

    ssl_certificate         /etc/nginx/conf.d/server.crt; #证书
    ssl_certificate_key     /etc/nginx/conf.d/server_nopass.key;#私钥


    if ( $http_origin ~ http://(.*).enjoy.com){
        set $allow_url $http_origin;
    }
    #是否允许请求带有验证信息
    add_header Access-Control-Allow-Credentials true;
    #允许跨域访问的域名,可以是一个域的列表,也可以是通配符*
    add_header Access-Control-Allow-Origin  $allow_url;
    #允许脚本访问的返回头
    add_header Access-Control-Allow-Headers 'x-requested-with,content-type,Cache-Control,Pragma,Date,x-timestamp';
    #允许使用的请求方法,以逗号隔开
    add_header Access-Control-Allow-Methods 'POST,GET,OPTIONS,PUT,DELETE';
    #允许自定义的头部,以逗号隔开,大小写不敏感
    add_header Access-Control-Expose-Headers 'WWW-Authenticate,Server-Authorization';
    #P3P支持跨域cookie操作
    add_header P3P 'policyref="/w3c/p3p.xml", CP="NOI DSP PSAa OUR BUS IND ONL UNI COM NAV INT LOC"';
    add_header test  1;

    if ($request_method = 'OPTIONS') {
        return 204;
    }

    location / {
        root   html/sales;
        index  welcome.html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

运行

 

https访问已经ok了,提示证书不安全是因为证书没有在机构认证过,正常情况证书是需要花钱购买的。

http重定向到https

server {
    listen       80;
    server_name  sales.enjoy.com;
    
    rewrite ^/ https://sales.enjoy.com redirect;

    if ( $http_origin ~ http://(.*).enjoy.com){
        set $allow_url $http_origin;
    }
    #是否允许请求带有验证信息
    add_header Access-Control-Allow-Credentials true;
    #允许跨域访问的域名,可以是一个域的列表,也可以是通配符*
    add_header Access-Control-Allow-Origin  $allow_url;
    #允许脚本访问的返回头
    add_header Access-Control-Allow-Headers 'x-requested-with,content-type,Cache-Control,Pragma,Date,x-timestamp';
    #允许使用的请求方法,以逗号隔开
    add_header Access-Control-Allow-Methods 'POST,GET,OPTIONS,PUT,DELETE';
    #允许自定义的头部,以逗号隔开,大小写不敏感
    add_header Access-Control-Expose-Headers 'WWW-Authenticate,Server-Authorization';
    #P3P支持跨域cookie操作
    add_header P3P 'policyref="/w3c/p3p.xml", CP="NOI DSP PSAa OUR BUS IND ONL UNI COM NAV INT LOC"';
    add_header test  1;

    if ($request_method = 'OPTIONS') {
        return 204;
    }

    location / {
        root   html/sales;
        index  welcome.html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

:在https里,ajax请求普通http,会报错(原因:会降低安全)

 

在https域下访问http域会报错。 

nginx高可用

问题

nginx解决tomcat高可用的思路,是前面加一层负载服务nginx。这种做法,总会有一个前端负载层存在宕机可能,是死循环。

 

解决方案

keepalived来解决,lvs 思想来解决

 

 

keepalived的思路

由 2台服务器软件虚拟出来一台 虚拟网关vip,此vip由两台机器共同协商生成。当有一台机器宕机时,另一台机器一样能维持vip。这保证了,只要两台机器不同时宕机,vip就存在。 

:keepalived只能应用于两台机器之间

keepalived下载、安装、配置

下载

下载地址:https://pan.baidu.com/s/1G7sLL-YkZGSMu8G76yz1Rw 密码:adbw。-----对应centos6系统,不同系统需要找下不同版本。

安装

1、

./configure --prefix=/data/program/keepalived --sysconf=/etc ##因为keepalive启动时候会默认读取/etc/keepalived/keepalived.conf

2、

make && make install

配置

打开/etc/keepalived/keepalived.conf,只需要配置如下一段。(其它是多余配置,删除)

 

重启

 

系统网卡通过ip addr命令查看

 

eth0的网卡上,出现两个ip,244.3是真实ip,244.200是虚拟vip 

以上是主机的配置,然后再重复下载、安装步骤,配置另外一台机器。主备两台机器的配置,只有两个配置差异: 

state BACKUP    # 指定keepalived的角色,MASTER为主,BACKUP为备
priority 100    # 优先级,数值越大,处理请求的优先级越高。备用数字小些

测试主备keepalived

正常情况下,vip是在主机器一端的,备用机器244.4上不会出现vip。如下图上半部分。此时,如果我们杀掉主机器上keepalived,备用机器上会出现vip。如下图下半部分。

 

主机器keepalived再启动后,备机中vip = 200消失了,如下图 

 

总结

KEEPALIVED高可用架构示意图

使用keepalived来监控nginx 

编辑一个sh监控脚本,sh脚本:

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
      /usr/local/nginx/sbin/nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived    #杀掉,vip就漫游到另一台机器                
      fi
fi

在配置文件中加入以下两处配置:

 

重启keepalived,测试监控效果,如下图操作: 

 

测试结果:nginx死不了

 

posted on 2020-03-10 22:43  阿里-马云的学习笔记  阅读(511)  评论(0编辑  收藏  举报