12.18 ssl原理
12.19 生成ssl密钥对
12.20 Nginx配置ssl
Nginx负载均衡
安装dig(yum install -y bind-utils)dig qq.com如下图
解析到2个IP上,可以通过上述2个IP做负载均衡
重新编辑一个load.conf文件(/usr/local/nginx/conf/vhost/下)
ip_hash的目的是让同一个用户始终保持在同一个机器上(如用户在访问ask.apelearn.com时,假设该网站有2个后端服务器A 和B可用, 如果不使用ip_hash则在访问过程中,刷新后未登录,因为请求从A到B了),如果端口是80则:80可以省略
测试:通常本机访问qq.com会访问默认虚拟主机,默认页
重新加载后变成qq.com的主页(源码)
Nginx不支持代理https(:443),可以用Nginx访问代理服务器的443端口,代理服务器访问后端web服务器的80端口
ssl原理
https相对于http多了一个加密过程
加密解密实现流程:
其中crt public是用来加密的 crt private 用来解密的
产生SSL密钥对
操作步骤如下图:
生成私钥 openssl genrsa -des3 -out tmp.key 2048
私钥去密码化:openssl rsa -in tmp.key -out liutlinux.key
rm -f tmp.key
用私钥请求生成.csr证书文件:openssl req -new -key liutlinux.key -out liutlinux.csr
通过私钥和请求证书生成.crt公钥文件:openssl x509 -req -days 365 -in liutlinux.csr -signkey liutlinux.key -out liutlinux.crt
如下图
Nginx配置SSL
在vhost目录下添加 ssl.conf并加入如下配置
创建网站根目录 mkdir /data/wwwroot/liut.com
-t检查语法发现错误,因为nginx在安装时没有添加ssl模块
查找需要安装的ssl模块 ./configure --help |grep -i ssl,加上后和nginx一起重新编译
make & make install
再次查看版本信息和-t检查语法错误,发现OK
重启nginx服务,查看监听端口多了443
测试:
①在Linux上: cd /data/wwwroot/liut.com/创建测试文件 vim index.html输入如下内容
直接访问报错400,可以编辑/etc/hosts访问
由于是自己颁发的证书,不被浏览器认可,所以出现 marked as not trusted by the user
②在windows上测试:找到windows上的Hosts文件C:\Windows\System32\drivers\etc\hosts,加入如下内容,保存
测试结果如下:
iptables -nvL发现有防火墙,简单的方法就是iptables -F,如果想只过滤443端口的则需要添加一条443端口放行的规则
测试成功
扩展:
扩展
针对请求的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.html