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

7747792c3cd1a053b69f33dad526062c016.jpg

 

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

 

 

261c040e87f8323b7de0932f33b2b281b8e.jpg

 

测试,正常情况下,本机访问www.qq.com,直接访问默认虚拟主机

c827ff1c973a798c58b78dfb1be733952b9.jpg

 

重新加载配置文件,使配置文件生效

21df0124ac8af35318e2fea471b73533eaf.jpg

 

重新访问,curl -x127.0.0.1:80 www.qq.com,以源码的形式形式网页的主页

ed6253f5930654e2320ab638a8795c8002c.jpg

 

 

 

 

二、SSL原理

 

SSL工作流程

浏览器发送一个https的请求给服务器;

服务器要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;

服务器会把公钥传输给客户端;

客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;

客户端把加密后的随机字符串传输给服务器;

服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);

服务器把加密后的数据传输给客户端;

客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;

 

ccd654baa6a9ae5b16b2908fb7b5b967921.jpg

 

 

生成SSL密钥对

cd /usr/local/nginx/conf/          //密钥对的存放路径

openssl                                   //生成密钥对的命令

rpm -qf `which openssl`          //查看openssl命令的安装包

7a5dc8fc480c69d5c55d6a8d439743a5c4e.jpg

 

openssl genrsa -des3 -out tmp.key 2048        //key文件为私钥

8fd09e5be621665a1981544b3f187c3f4c8.jpg

 

openssl rsa -in tmp.key -out miyao.key     //转换key,取消密码

37f34aca9c45f7d68ed580f3e9b75ce382c.jpg

 

rm -f tmp.key          //删除之前生成的tmp.key

 

openssl req -new -key miyao.key -out miyao.csr         //生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件

47be10cf38cab9f2ef9b047fe8c10f6ab89.jpg

 

 

openssl x509 -req -days 365 -in miyao.csr -signkey miyao.key -out miyao.crt            //生成公钥文件

caa6226e207a5d977012445898428fc9703.jpg

这里的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;

}

 

e06c7d8f632878013ee4c04232129f3442e.jpg

 

mkdir /data/wwwroot/aaa.com           //创建目录

 

检测配置文件,报错提示不知道ssl配置

7832b46001c843be09226d3764aa8915000.jpg

 

编译安装时未指定支持ssl,需重新编译ssl模块

39726c57b156d1994f4ac51801bcb59dc8b.jpg

 

cd /usr/local/src/nginx-1.12.1      //进入nginx源码包解压包目录

./configure --help |grep -i ssl       //查看ssl模块

5e5910dfad72baf6996acfd1570a0717e92.jpg

 

./configure --prefix=/usr/local/nginx --with-http_ssl_module         //重新编译ssl模块

 

make && make install     编译安装

 

查看编译安装信息

f9757342586093b52017b0d2b11bab446f1.jpg

 

检查配置文件,正常

d11e754cefebd3fcb3b17e5ab0ff7bc6410.jpg

 

/etc/init.d/nginx restart       //重启服务

 

查看监听端口

2af7e1569ea116c095c7a0d6738d7b9be0b.jpg

 

 

cd /data/wwwroot/aaa.com/            //进入该目录

vim index.html           //创建index.html文件,编辑如下内容

c320f379e3b14d79d2ae563969b8fd9b479.jpg

 

 

vim /etc/hosts       //添加hosts文件

cbcf6263186bf0494818276bd6c890b606a.jpg

 

curl https://aaa.com        //服务该域名,测试成功

e51c29c607668cae99ad7b98d236b2fe580.jpg

 

用web测试

修改本地hosts文件

cd2803d17b0d23e3101e8534fbfe6aae0fe.jpg

 

编辑对应的ip和域名

51555ac36aee212cef32e185d3d6d3e3761.jpg

打开web浏览器,输入域名访问

51555ac36aee212cef32e185d3d6d3e3761.jpg

 

a48a378674cf4bab0702a570837812fa4d1.jpg

访问成功

4eb2daafcea24743abea31e808211a2bf44.jpg

 

 

四、php-fpm的pool

假如所有的网站都使用同一个pool,如果其中一个网站发生故障把php-fpm进程耗尽,会造成其它的站点也显示502,所有应该把每一个站点隔离开,使用单独的pool。

 

vim /usr/local/php-fpm/etc/php-fpm.conf      //进入php主配置文件,

 

ac8f2a86a3b996f2dd909210fea80e80cdd.jpg

 

/usr/local/php-fpm/sbin/php-fpm -t        //检测配置文件

/etc/init.d/php-fpm reload              //重新加载配置文件

a64408bfbedb523646287218ddc81fdbe36.jpg

 

ps aux |grep php-fpm        //查看服务进程

f45d3133695744333dba9f4796a235c9bc5.jpg

 

拆分php配置文件pool池子

vim /usr/local/nginx/conf/vhost/aaa.com.conf              //编辑默认虚拟主机配置文件

7e667461e6462a776b64ed8545c1694a3b4.jpg

 

vim /usr/local/php/etc/php-fpm.conf         //在[global]部分增加

include = etc/php-fpm.d/*.conf

 

5b247c34575ee3e3483b54364a707e5aa2e.jpg

 

cd /usr/local/php/etc/          //进入php配置文件目录

mkdir php-fpm.d                  //创建目录

cd php-fpm.d/                       //进入目录

vim www.conf                     //创建www.conf文件,将php主配置文件的www池子,拷贝到该文件下

e89bffb8889c1697a6463bad0bce4b7f7fa.jpg

 

vim abc.conf        //创建abc.conf文件,将php主配置文件的abc.com池子,拷贝到该文件下

4ffebbd3805592fc12de57303bf40aa8fbb.jpg

 

检查服务语法是否正确,并重启服务

7de1196a774f3c0258321c205237a978607.jpg

 

查看服务进程

a8e1d2e3aff3c6e491fa37eaa11f825f9a2.jpg

 

 

五、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

 

f14cf7c84c6fa0c2e8383d331698b54e221.jpg

 

 

重新加载配置文件

b9338f735e5a972ea9bbf8ce58b4aae7b4e.jpg

 

查看日志文件路径

a8e1d2e3aff3c6e491fa37eaa11f825f9a2.jpg

 

 

模拟慢执行php

cat /usr/local/nginx/conf/vhost/test.com.conf            //

8afdc2cccf88261b036a7a69d1d7a81e5f6.jpg

 

vim /data/wwwroot/test.com/sleep.php         //创建sleep.php文件,编辑如下脚本

<?php

echo "test slow log";

sleep(2);

echo "done";

?>

 

cd849dad83f299cfc481731317503f88112.jpg

 

vim /usr/local/php-fpm/etc/php.ini         //进入配置文件,搜索display_errors,修改为On,可以在浏览器看到具体的错误输出

13e59d5ce0fc340493f64ec68a9b5abc32d.jpg

 

用curl访问,错误信息显示在屏幕

fb70eac8250b50a65880932b7b1ad5dc6ef.jpg

 

修改错误后,显示正常,输出过程延迟2秒

51c61a2122c40bfb4bfd67d6abb95ba763f.jpg

 

cat /usr/local/php-fpm/var/log/www-slow.log    //查看日志信息

b64b0655a719eb118751ec8d4fb430921af.jpg

 

 

 

六、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/         //如果没定义正确的路径,就无法访问

29725bbe6e8ad081be53a8f246e2c29d46f.jpg

 

 

/etc/init.d/php-fpm restart      //重启服务

curl -x127.0.0.1:80 test.com/sleep.php        //正常访问

0a4cda4a3b1c195418ff44fb0d294d49fea.jpg

vim /usr/local/php-fpm/etc/php.ini          //进入php配置文件,修改如下内容

搜索display_errors,关闭错误日志显示

9460c227470f9fb6470a9690f86976370fc.jpg

 

搜索error_log,增加错误日志路径

c2af58bc974495d3f16486fce232caff05a.jpg

 

搜索error_reporting,修改日志级别

3656aa97db17b206f400a869f2d15eabc03.jpg

 

测试

892ed6fe6f39d550ca13a5244fdf9b4fbfb.jpg

 

查看错误日志路径

5ff2bcfef93180fdd5d86d5398646c028a2.jpg

 

创建错误日志文件,并修改权限,重启服务

c793bbf7ec242488758b2ddb8d13a43116f.jpg

 

无法访问,显示404

4ddb3d1fe731d9455ff29b78e5d38328fa5.jpg

 

cat /usr/local/php-fpm/var/log/php_errors.log          //查看日志

b7b9c34b02eaaa9f80ec407e54beadf85a8.jpg

 

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf         //进入该目录,修改正确的路径

71caae8d97587f40bb9f6c2f99bf265c196.jpg

 

/etc/init.d/php-fpm restart          //重启服务

 

重新访问,显示正常

32b3d0d8acdf495f91639b50f07243b4321.jpg

 

 

七、php-fpm进程管理

cat /usr/local/php-fpm/etc/php-fpm.d/www.conf       //查看php-fpm进程配置

4d2f2491e2f094d75b8f13b0e94735db06f.jpg

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值