您的位置:首页 > 运维架构 > 网站架构

LNMP架构(下)

2020-02-02 22:55 746 查看

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

  • 点赞
  • 收藏
  • 分享
  • 文章举报
chiluo7579 发布了0 篇原创文章 · 获赞 0 · 访问量 308 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: