2018-7-6笔记
12.17 Nginx负载均衡
# dig 可以反馈多个ip
· vim /usr/local/nginx/conf/vhost/load.conf #写入如下内容
upstream qq_com #upstream来指定多个web server
{
ip_hash;
server61.135.157.156:80;
server125.39.240.113:80;
}
server
{
listen 80;
server_name www.qq.com;
location /
{
proxy_pass http://qq_com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
12.18SSL原理
1、SSL工作流程
· 浏览器发送一个https的请求给服务器;
· 服务器要有一套数字证书,可以自己制作,也可以向组织申请,区别是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥;
· 服务器会把公钥传输给客户端;
· 客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
· 客户端把加密后的随机字符串传输给服务器;
· 服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);
· 服务器把加密后的数据传输给客户端;
· 客户端收到数据后,再用自己的私钥也就是那个随机字符串解密
2、SSL工作流程图
12.19生成SSL**对
· cd /usr/local/nginx/conf #公钥和私钥的放置路径
· openssl genrsa -des3 -out tmp.key2048 #key文件为私钥,生成rsa格式的私钥,2048表示私钥长度,生成**的时候必须要有密码
· openssl rsa -in tmp.key -outaminglinux.key #转换key,取消密码,将上一步生成的**文件更改名字,避免在浏览器访问时要输入密码
· rm -f tmp.key
· openssl req -new -key aminglinux.key -outaminglinux.csr #生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件
· openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt #aminglinux.crt为公钥
12.20 Nginx配置SSL
· vim /usr/local/nginx/conf/vhost/ssl.conf #编辑ssl配置文件,加入如下内容
server
{
listen 443;
server_name aming.com;
index index.htmlindex.php;
root/data/wwwroot/aming.com;
ssl on;
ssl_certificate aminglinux.crt; #指定公钥
ssl_certificate_key aminglinux.key; #指定私钥
ssl_protocols TLSv1TLSv1.1 TLSv1.2; #SSL协议版本
}
· /usr/local/nginx/sbin/nginx -t &&-s reload #语法检查,若报错unknown directive “ssl” ,需要重新编译nginx,加上--with-http_ssl_module, 命令:/usr/local/nginx/sbin/nginx-V查看编译参数
· mkdir /data/wwwroot/aming.com
· echo “ssl testpage.”>/data/wwwroot/aming.com/index.html #编辑测试文件
· 编辑hosts,增加“127.0.0.1 aming.com”
· curl https://aming.com/ #命令行访问测试,浏览器访问测试会提示不安全,因为是自己生成的证书,未被浏览器认证
12.21 php-fpm的pool
Nginx可以配置多个虚拟主机,php-fpm同样也支持配置多个pool,每一个pool可以监听一个端口,也可以监听一个socket,等于把网站分开隔离互不影响,因为当一个网站资源耗尽后,进程就不提供服务了,然而会导致所有网站报错502,让他们进行隔离后可以让他们互相独立,互不影响。一个网站挂了,还有其他网站可以使用。
1.在php-fpm配置文件上再加入一个配置
· [www1]
listen = /tmp/php-fcgi1.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
·
· 可以看到这个配置文件上有2个pool ,这样设置就可以区分开了
· /usr/local/php-fpm/sbin/php-fpm -t //检查语法
· /etc/init.d/php-fpm restart //重启服务
· ps aux|grep php-fpm //查看进程,可以看到下图有个2个进程,分别是www和www1,
通过php-fpm慢执行日志,我们可以非常清晰地了解到PHP脚本哪里执行时间长,它可以定位到具体的行。
1./usr/local/php-fpm/etc/php-fpm.conf
2.添加如下内容(在pool下)
request_slowlog_timeout= 1 //即php脚本执行超过1秒则记录日志
slowlog =/usr/local/php-fpm/var/log/www-slow.log //定义慢执行日志的路径和名字
3./usr/local/php-fpm/sbin/php-fpm -t //检查语法
/etc/init.d/php-fpm restart //重启服务
4.写一个php脚本 \\脚本2秒执行
<?php
echo "test slow log";
sleep(2);
echo "done"
?>
5.查看日志
cat www-slow.log
[13-Jun-2018 20:19:49] [pool www] pid 2811
script_filename =/data/nginx1/1.php //影响缓慢的脚本
[0x00007f87210dd1d8] sleep()/data/nginx1/1.php:3 //可以看到PHP脚本第三行是影响的关键
隔离其他目录~
1./usr/local/php-fpm/etc/php-fpm.conf
添加如下内容
php_admin_value[open_basedor]=/data/nginx1:/tmp/ //主要这里的路径要跟nginx.conf的目录相同否则会报错
2./etc/init.d/php-fpm restart //重启服务
3.测试,
curl -x127.0.0.1:80test.com/1.php