LNMP架构(下)
一、Nginx负载均衡
二、SSL原理
三、Nginx配置SSL
四、php-fpm的pool
五、php-fpm慢执行日志
六、php-fpm定义open_basedir
七、php-fpm进程管理
一、Nginx负载均衡
dig //域名解析工具,系统默认没安装,安装命令:yum install -y bind-utils
以qq.com为例,解析到三个IP
vim /usr/local/nginx/conf/vhost/load.conf // 写入如下内容
upstream qq_com
{
ip_hash;
server 58.60.9.21:80;
server 180.163.26.39:80;
server 59.37.96.63: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
测试,正常情况下,本机访问www.qq.com,直接访问默认虚拟主机
重新加载配置文件,使配置文件生效
重新访问,curl -x127.0.0.1:80 www.qq.com,以源码的形式形式网页的主页
二、SSL原理
SSL工作流程
浏览器发送一个https的请求给服务器;
服务器要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;
服务器会把公钥传输给客户端;
客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
客户端把加密后的随机字符串传输给服务器;
服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);
服务器把加密后的数据传输给客户端;
客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;
生成SSL密钥对
cd /usr/local/nginx/conf/ //密钥对的存放路径
openssl //生成密钥对的命令
rpm -qf `which openssl` //查看openssl命令的安装包
openssl genrsa -des3 -out tmp.key 2048 //key文件为私钥
openssl rsa -in tmp.key -out miyao.key //转换key,取消密码
rm -f tmp.key //删除之前生成的tmp.key
openssl req -new -key miyao.key -out miyao.csr //生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件
openssl x509 -req -days 365 -in miyao.csr -signkey miyao.key -out miyao.crt //生成公钥文件
这里的miyao.crt为公钥
三、Nginx配置SSL
vim /usr/local/nginx/conf/vhost/ssl.conf //加入如下内容
server
{
listen 443;
server_name aaa.com;
index index.html index.php;
root /data/wwwroot/aaa.com;
ssl on;
ssl_certificate miyao.crt;
ssl_certificate_key miyao.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
mkdir /data/wwwroot/aaa.com //创建目录
检测配置文件,报错提示不知道ssl配置
编译安装时未指定支持ssl,需重新编译ssl模块
cd /usr/local/src/nginx-1.12.1 //进入nginx源码包解压包目录
./configure --help |grep -i ssl //查看ssl模块
./configure --prefix=/usr/local/nginx --with-http_ssl_module //重新编译ssl模块
make && make install 编译安装
查看编译安装信息
检查配置文件,正常
/etc/init.d/nginx restart //重启服务
查看监听端口
cd /data/wwwroot/aaa.com/ //进入该目录
vim index.html //创建index.html文件,编辑如下内容
vim /etc/hosts //添加hosts文件
curl https://aaa.com //服务该域名,测试成功
用web测试
修改本地hosts文件
编辑对应的ip和域名
打开web浏览器,输入域名访问
访问成功
四、php-fpm的pool
假如所有的网站都使用同一个pool,如果其中一个网站发生故障把php-fpm进程耗尽,会造成其它的站点也显示502,所有应该把每一个站点隔离开,使用单独的pool。
vim /usr/local/php-fpm/etc/php-fpm.conf //进入php主配置文件,
/usr/local/php-fpm/sbin/php-fpm -t //检测配置文件
/etc/init.d/php-fpm reload //重新加载配置文件
ps aux |grep php-fpm //查看服务进程
拆分php配置文件pool池子
vim /usr/local/nginx/conf/vhost/aaa.com.conf //编辑默认虚拟主机配置文件
vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加
include = etc/php-fpm.d/*.conf
cd /usr/local/php/etc/ //进入php配置文件目录
mkdir php-fpm.d //创建目录
cd php-fpm.d/ //进入目录
vim www.conf //创建www.conf文件,将php主配置文件的www池子,拷贝到该文件下
vim abc.conf //创建abc.conf文件,将php主配置文件的abc.com池子,拷贝到该文件下
检查服务语法是否正确,并重启服务
查看服务进程
五、php-fpm慢执行日志
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //加入如下内容
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
重新加载配置文件
查看日志文件路径
模拟慢执行php
cat /usr/local/nginx/conf/vhost/test.com.conf //
vim /data/wwwroot/test.com/sleep.php //创建sleep.php文件,编辑如下脚本
<?php
echo "test slow log";
sleep(2);
echo "done";
?>
vim /usr/local/php-fpm/etc/php.ini //进入配置文件,搜索display_errors,修改为On,可以在浏览器看到具体的错误输出
用curl访问,错误信息显示在屏幕
修改错误后,显示正常,输出过程延迟2秒
cat /usr/local/php-fpm/var/log/www-slow.log //查看日志信息
六、php-fpm定义open_basedir
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //加入如下内容
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/ //如果没定义正确的路径,就无法访问
/etc/init.d/php-fpm restart //重启服务
curl -x127.0.0.1:80 test.com/sleep.php //正常访问
vim /usr/local/php-fpm/etc/php.ini //进入php配置文件,修改如下内容
搜索display_errors,关闭错误日志显示
搜索error_log,增加错误日志路径
搜索error_reporting,修改日志级别
测试
查看错误日志路径
创建错误日志文件,并修改权限,重启服务
无法访问,显示404
cat /usr/local/php-fpm/var/log/php_errors.log //查看日志
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //进入该目录,修改正确的路径
/etc/init.d/php-fpm restart //重启服务
重新访问,显示正常
七、php-fpm进程管理
cat /usr/local/php-fpm/etc/php-fpm.d/www.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的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。
转载于:https://my.oschina.net/u/3991860/blog/2988518
- 点赞
- 收藏
- 分享
- 文章举报
- 实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构
- Lnmp架构之PHP
- 12.1 LNMP架构介绍 12.2 MySQL安装 12.3/12.4 PHP安装 12.5 Nginx介绍
- LNMP架构介绍、Mysql安装、php安装、Nginx介绍
- CentOS 7部署LNMP架构(这里以wordpress博客为例)
- 基于haproxy+keepalive+varnish实现lnmp企业级架构
- LNMP架构 (3) 之 Nginx访问日志、日志切割、静态文件不记录日志和过期时间
- LNMP架构之tomcat安装与应用配置(session粘性、session共享)
- 编译安装LNMP架构
- 转:专访企业QQ SaaS团队,谈企业级LNMP架构设计
- LNMP架构(二)之nginx安装,虚拟主机,用户认证,域名重定向
- LNMP架构——Nginx默认虚拟主机配置
- LNMP架构(3)
- LNMP架构——php-fpm进程管理
- YUM安装LNMP架构
- LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)
- centos6.5下使用lnmp架构安装nextcloud云盘 推荐
- CentOS6.5下使用LNMP架构安装nextcloud云盘
- LVS+keepalived+LNMP架构
- 记录LNMP多主机架构Wordpress博客实施过程中的一些坑