浏览器使用公钥,把数据加密后,再发送出去。经过公钥加密内容,只有有私钥的人(nginx服务器)才看得懂。
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了,提示证书不安全是因为证书没有在机构认证过,正常情况证书是需要花钱购买的。
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解决tomcat高可用的思路,是前面加一层负载服务nginx。这种做法,总会有一个前端负载层存在宕机可能,是死循环。
keepalived来解决,lvs 思想来解决
keepalived的思路:
由 2台服务器软件虚拟出来一台 虚拟网关vip,此vip由两台机器共同协商生成。当有一台机器宕机时,另一台机器一样能维持vip。这保证了,只要两台机器不同时宕机,vip就存在。
注: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 # 优先级,数值越大,处理请求的优先级越高。备用数字小些
正常情况下,vip是在主机器一端的,备用机器244.4上不会出现vip。如下图上半部分。此时,如果我们杀掉主机器上keepalived,备用机器上会出现vip。如下图下半部分。
主机器keepalived再启动后,备机中vip = 200消失了,如下图
KEEPALIVED高可用架构示意图
编辑一个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死不了
原文:https://www.cnblogs.com/alimayun/p/12445668.html