• 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死不了

  • 相关阅读:
    改变字段的值
    创建新的对象
    根据方法的名称来执行方法
    获取类的字段
    获取构造器的信息
    找出类的方法
    开始使用Reflection
    反射简介
    leetcode501
    leetcode235
  • 原文地址:https://www.cnblogs.com/alimayun/p/12445668.html
Copyright © 2020-2023  润新知