12.17 Nginx负载均衡
12.18 ssl原理
12.19 生成ssl密钥对
12.20 Nginx配置ssl
扩展
- 针对请求的uri来代理 http://ask.apelearn.com/question/1049
- 根据访问的目录来区分后端的web http://ask.apelearn.com/question/920
12.17 Nginx负载均衡
有时候一个域名可以通过多个IP解析,负载均衡就是代理对域名访问请求自动选择IP
yum install -y bin-utils //安装dig命令
dig qq.com //挖掘qq.com域名的IP地址
vim /usr/local/nginx/conf/vhost/load.conf // 定义代理
···
#以QQ举例,因为www.qq.com域名有多个IP
#ip_hash让同一个来源的访问始终走向一个ip,从而保留用户信息
upstream qqxx
{
ip_hash;
server 61.135.157.156:80;
server 125.39.240.113:80;
}
server
{
listen 80;
server_name www.qq.com;
location /
{
proxy_pass http://qqxx;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
···
curl -x127.0.0.1:80 www.qq.com //加载之前访问默认虚拟主机
[ctrl-r] -t -s reload
curl -x127.0.0.1:80 www.qq.com //加载后访问网页源码
12.18 ssl原理
理解:A是我的电脑 B是网站,公钥,可以理解为锁盒,私钥理解为钥匙
- A访问B ——被黑客截到没有用,黑客想知道A的信息,还没开始传
- B给A一个锁盒1号,这个锁盒可以当盒子用,B自己有钥匙1号——中间黑客截到还是没用,有锁盒1没有钥匙打不开
- A得到锁盒1号,自己生成一套锁盒2号和钥匙2号(对称加密),锁盒2号装进锁盒1号,还给B——中间被截到的还是打不开的锁盒1,
- B用钥匙1号打开锁盒1号,得到锁盒2号,开始用锁盒2号传输数据给A——黑客:“还是锁盒。。”
- A以后接收就用钥匙2号解开B发回来的数据,并用1号锁盒装数据发给B
- 如果第二步,B给A的锁盒如果被篡改,A的浏览器会报警,锁盒子不对。(公证需要付费)
12.19 生产ssl密钥对
步骤:
- 生成私钥.key
- 私钥去密码
- 私钥生成证书申请文件.csr
- 私钥.key加.csr生成公钥.crt
测试
cd /usr/local/nginx/conf
rpm -qf `which openssl`
openssl genrsa -des3 -out tmp.key 2048 //key文件为私钥
openssl rsa -in tmp.key -out axiang.key //转换key,取消密码
rm -f tmp.key
openssl req -new -key axiang.key -out axiang.csr //生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件
openssl x509 -req -days 365 -in axiang.csr -signkey axiang.key -out axiang.crt //axiang.crt为公钥
ls axiang*
12.20 Nginx配置ssl
vim /usr/local/nginx/conf/vhost/ssl.conf//加入如下内容
...
server
{
listen 443;
server_name axiang.com;
index index.html index.php;
root /data/wwwroot/axiang.com;
ssl on;
ssl_certificate axiang.crt;
ssl_certificate_key axiang.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
-t && -s reload //若报错unknown directive “ssl” ,需要重新编译nginx,加上--with-http_ssl_module
mkdir /data/wwwroot/axiang.com
echo "This is ssl" > /data/wwwroot/axiang.com/index.html
fg
/usr/local/nginx/sbin/nginx -V //查看需要编译啥
./configure --help |grep -i ssl //查看有那些编译选项
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
make install
/usr/local/nginx/sbin/nginx -t
/etc/init.d/nginx restart
netstat -lntp
curl -x127.0.0.1:443 https://axiang.com //这种方式不支持,需要hosts指向
vi /etc/hosts
curl https://axiang.com/
iptables -F // win7浏览器测试
curl https://axiang.com/ 效果
win7浏览器访问https://axiang.com/,也要加hosts 192.168.83.138 axiang.com