标签:linux
12.17 Nginx负载均衡(当我们的代理服务器后面是很多web服务器的时候,那么就需要负载均衡)
查看www.qq.com 域名的解析ip
dig www.qq.com (dig可以查看到其域名对应的所有ip。而ping只能看到一个)
yum install -y bind-utils //安装dig命令包
dig www.qq.com
cd /usr/local/nginx/conf/vhost
upstream qq_com //upstream来指定多个web server
ip_hash; //这里下面可以定义多个Ip; 这里设置是能让用户始终访问在一台服务器。ip_hash为负载均衡的算法,表示根据IP地址请求分到不同 的服务器上。
server_name www.qq.com; //servername后面能跟ip
proxy_pass http://qq_com; //这里的名字要和upstream 处定义的一致
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
curl -x127.0.0.1:80 www.qq.com
此时我们就可以访问到www.qq.com首页的源码内容
12.18 ssl原理
ssl原理
HTTPS它是一种加密的HTTPS协议,如果HTTPS通信的数据包在传输过程中被截获,我们可以破译这些数据包里面的信息,这里面不乏一些用户名、密码、手机号等敏感的信息,而如果使用HTTPS通信,即使数据包被截获,我们也无法破译里面的内容。使用https 通信时,我们在访问web服务器时,返回的数据包进行加密,从而保证数据安全。
(SSL就是那个服务器的证书,就是访问流程第二步服务器的公钥和私钥)
解读SSL的工作流程
浏览器发送一个https的请求给服务器;
服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;
服务器会把公钥传输给客户端;
客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
客户端把加密后的随机字符串传输给服务器;
服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);
服务器把加密后的数据传输给客户端;
客户端收到数据后,再用自己的私钥(也就是那个随机字符串)解密;
12.19 生成ssl密钥对
生成ssl密钥对(这个自定义的ssl密钥对只能在本机上使用,不能用作在生产环境中)
1. 公钥私钥放到指定目录下:
cd /usr/local/nginx/conf/
2.生成私钥,key文件为私钥(2048是加密字符串长度)
rpm -qf `which openssl` //查询缺少的openssl包,安装命令yum install -y openssl安装
需要先安装openssl工具,不知道包名的话,使用命令查看:rpm -qf `which openssl `
openssl genrsa -des3 -out tmp.key 2048 //生成私钥,key文件为私钥,2048为加密字符串长度,生成过程中要设置密码密码输入不能太短,否则不成功
3.转换key,取消密码(-in指定哪个密钥,-out输出)因为设置了密码太麻烦,所以要转换key,取消密码:
openssl rsa -in tmp.key -out aminglinux.key
//这一步是把刚刚生成的tmp.key再转换成aminglinux.key,目的是删除刚才设置的密码,如果key文件有密码,就必须在Nginx加载它的时候输入它的密码,因此很不方便
(此时生成的aminglinux.key和tmp.key是同样的,aminglinux.key无密码而已)
4.删除有密码的tmp.key
rm -f tmp.key
5.生成证书请求文件 aminglinux.csr
openssl req -new -key aminglinux.key -out aminglinux.csr //需要拿这个文件和私钥一起生产公钥文件
备注:因为是颁发给自己的证书所以信息可以随便填一下,但是购买的ssl证书,则这个内容需要按购买方案的写入)
6.生成公钥文件aminglinux.crt,用刚才的证书请求文件和之前的私钥文件一起
openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt
//这里的aminglinux.crt为公钥。days为365是证书的日期是一年
12.20 Nginx配置ssl
Nginx配置ssl
1. 生成一个新的ssl配置文件
vim /usr/local/nginx/conf/vhost/ssl.conf
增加如下内容:
server { listen 443; server_name aming.com; index index.html index.php; root /data/wwwroot/aming.com; ssl on; //开启ssl,支持https ssl_certificate aminglinux.crt; //指定公钥 ssl_certificate_key aminglinux.key; //指定私钥 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; //定义三个协议 }
最终配置如下:
2.创建aming.com目录,添加测试文件
mkdir /data/wwwroot/aming.com
cd /data/wwwroot/aming.com
vim index.html 增加如下内容: This is ssl.
3. 测试语法
/usr/local/nginx/sbin/nginx -t
报错,如图:
原因:当初编译的时候没有指定支持ssl,所以需要重新编译nginx,加上–with-http_ssl_module -t && -s reload
解决方法:
指定到Nginx的源码包中,重新编译:./configure --prefix=/usr/local/nginx --with-http_ssl_module,操作如下:
cd /usr/local/src/nginx-1.12.1
./configure --help | grep -i ssl
./configure --prefix=/usr/local/nginx --with-http_ssl_module
echo $?
make
make install
/usr/local/nginx/sbin/nginx -V //现在就多了http_ssl_module这个参数 ,完成后再测试语法OK
3.1再次检查配置文件是否有误,重新加载配置:
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
4.重启nginx服务:
/etc/init.d/nginx restart
看监听端口是否多了一个443
netstat -lntp
5.编辑本地hosts文件
vi /etc/hosts
增加一条记录:127.0.0.1 aming.com
6.使用curl测试
curl https://aming.com/
这个时候提示我们的ssl不被信任,但是其实测试已成功。因为我们的ssl证书是自己写的,不合法被服务器web识别。
7.window浏览器测试:
在hosts文件中增添访问指向域名:c:\windows\system32\drivers\etc
如果访问不到-->查看防火墙(iptables -nvL)有规则的话,
方法一:清空规则:iptable -F
方法二:添加443端口规则
(沃通可以买到合法的ssl证书)
标签:linux
原文地址:http://blog.51cto.com/404006045/2128685