Nginx负载均衡
-
vim /usr/local/nginx/conf/vhost/load.conf // 写入如下内容
upstream qq_com
{
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://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;
}
}
upstream来指定多个web server
ip_hash,保证客户端保持访问一个ip。也就是一个服务器。
proxy_pass 后面不能跟ip了,只能跟upstream后面的名字
-
先用qq.com作为实验对象。
可以用dig来查看这个qq.com有几个ip。就是域名解析。如果dig 没有可以装一下yum install -y bind-utils
[root@aminglinux-01 ~]# dig qq.com
; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7 <<>> qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63880
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;qq.com. IN A
;; ANSWER SECTION:
qq.com. 109 IN A 125.39.240.113
qq.com. 109 IN A 61.135.157.156
;; Query time: 13 msec
;; SERVER: 119.29.29.29#53(119.29.29.29)
;; WHEN: 二 10月 24 17:28:56 CST 2017
;; MSG SIZE rcvd: 67
[root@aminglinux-01 ~]#
-
nginx不支持代理 https
SSL工作流程
- 浏览器发送一个https的请求给服务器;
- 服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;
php-fpm的pool
-
因为防止一个网站出问题导致pool出问题所有网站都不能用了。所以有必要每个站点使用单独的pool。
-
设置多个pool
vim vim /usr/local/php-fpm/etc/php-fpm.conf//在[global]部分增加
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.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
[aming.com]
listen = /tmp/aming.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
检查
[root@aminglinux-01 etc]# /usr/local/php-fpm/sbin/php-fpm -t
[25-Oct-2017 19:54:35] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
重启
[root@aminglinux-01 etc]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@aminglinux-01 etc]#
ps aux |grep php-fpm
[root@aminglinux-01 etc]# ps aux |grep php-fpm
root 2566 0.1 0.4 227200 4992 ? Ss 19:55 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 2567 0.0 0.4 227140 4716 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2568 0.0 0.4 227140 4716 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2569 0.0 0.4 227140 4716 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2570 0.0 0.4 227140 4716 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2571 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2572 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2573 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2574 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2575 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2576 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2577 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2578 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2579 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2580 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2581 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2582 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2583 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2584 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2585 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2586 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool www
php-fpm 2587 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2588 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2589 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2590 0.0 0.4 227140 4720 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2591 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2592 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2593 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2594 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2595 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2596 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2597 0.0 0.4 227140 4724 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2598 0.0 0.4 227140 4728 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2599 0.0 0.4 227140 4728 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2600 0.0 0.4 227140 4728 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2601 0.0 0.4 227140 4728 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2602 0.0 0.4 227140 4728 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2603 0.0 0.4 227140 4728 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2604 0.0 0.4 227140 4728 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2605 0.0 0.4 227140 4728 ? S 19:55 0:00 php-fpm: pool aming.com
php-fpm 2606 0.0 0.4 227140 4728 ? S 19:55 0:00 php-fpm: pool aming.com
root 2613 0.0 0.0 112668 972 pts/0 R+ 19:57 0:00 grep --color=auto php-fpm
这样把pool和网站绑在一起。
[root@aminglinux-01 etc]# cd /usr/local/nginx/conf/vhost/
[root@aminglinux-01 vhost]# ls
aaa.com.conf load.conf ssl.conf test.com.conf
[root@aminglinux-01 vhost]# vi test.com.conf
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/aming.sock; //改这里
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
}
php-fpm慢执行日志
-
编辑vim /usr/local/php-fpm/etc/php-fpm.conf //加入如下内容
request_slowlog_timeout = 1 //超过一秒钟就要记录日志
slowlog = /usr/local/php-fpm/var/log/www-slow.log //日志路径
/usr/local/php-fpm/sbin/php-fpm -t
/etc/init.d/php-fpm reload
-
模拟执行慢。
-
cd /data/wwwroot/test.com/
-
创建一个sleep.php
写入如下内容
<?php
echo “test slow log”;
sleep(2);
echo “done”;
?>
-
curl -x192.168.245.130:80 test.com/sleep.php
-
查看日志cat /usr/local/php-fpm/var/log/www-slow.log
open_basedir
-
vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf//加入如下内容
php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/
创建测试php脚本,进行测试 再次更改aming.conf,修改路径,再次测试 配置错误日志 再次测试 查看错误日志
php-fpm进程管理
-
pm = dynamic //动态进程管理,也可以是static
-
pm.max_children = 50 //最大子进程数,ps aux可以查看
-
pm.start_servers = 20 //启动服务时会启动的进程数
-
pm.min_spare_servers = 5 //定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。
-
pm.max_spare_servers = 35 //定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。
-
pm.max_requests = 500 //定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。
扩展学习
- 针对请求的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
- nginx中的root和alias区别 http://blog.csdn.net/21aspnet/article/details/6583335