0518--LNMP(下)

任务列表:

12.17 Nginx负载均衡
12.18 ssl原理
12.19 生成ssl密钥对
12.20 Nginx配置ssl
12.21 php-fpm的pool
12.22 php-fpm慢执行日志
12.23 open_basedir
12.24 php-fpm进程管理

扩展
ssl相关
https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/ca.md
https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/ssl.md
负载均衡
https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/lb.md
nginx算法分析
https://blog.whsir.com/post-1482.html
root和alias
http://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/

预习笔记

Nginx负载均衡

负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backend servers,也叫做服务池, 后面简称backend)来做复杂的计算、处理和响应,这种模式的好处是相当多的:隐藏业务主机更安全,节约了公网IP地址,并且在业务量增加的时候可以方便地扩容后台服务器。

配置一个负载均衡配置文件,在配置中写入以下内容
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;
    }
}

dig命令可以查看域名对应的IP,使用yum install -y bind-utils安装该命令
在这里插入图片描述

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试
在这里插入图片描述

负载均衡扩展:
Nginx负载均衡(工作在七层“应用层”)功能主要是通过upstream模块实现,Nginx负载均衡默认对后端服务器有健康检测的能力,仅限于端口检测,在后端服务器比较少的情况下负载均衡能力表现突出。
Nginx的几种负载均衡算法:
1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,则自动剔除故障机器,使用户访问不受影响。
2、weight:指定轮询权重,weight值越大,分配到的几率就越高,主要用于后端每台服务器性能不均衡的情况。
3、ip_hash:每个请求按访问IP的哈希结果分配,这样每个访客固定访问一个后端服务器,可以有效的解决动态网页存在的session共享问题。
4、fair(第三方):更智能的一个负载均衡算法,此算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。如果想要使用此调度算法,需要Nginx的upstream_fair模块。
5、url_hash(第三方):按访问URL的哈希结果来分配请求,使每个URL定向到同一台后端服务器,可以进一步提高后端缓存服务器的效率。如果想要使用此调度算法,需要Nginx的hash软件包。
在upstream模块中,可以通过server命令指定后端服务器的IP地址和端口,同时还可以设置每台后端服务器在负载均衡调度中的状态,常用的状态有以下几种:
1、down:表示当前server暂时不参与负载均衡。
2、backup:预留的备份机,当其他所有非backup机器出现故障或者繁忙的时候,才会请求backup机器,这台机器的访问压力最轻。
3、max_fails:允许请求的失败次数,默认为1,配合fail_timeout一起使用
4、fail_timeout:经历max_fails次失败后,暂停服务的时间,默认为10s(某个server连接失败了max_fails次,则nginx会认为该server不工作了。同时,在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。)
一个负载均衡器的名称为whsirserver,这个名称可以自己定义,在后面proxy_pass直接调用即可。
proxy_next_upstream参数用来定义故障转移策略,当后端服务器节点返回500、502和执行超时等错误时,自动将请求转发到upstream负载均衡器中的另一台服务器,实现故障转移。

SSL原理

在这里插入图片描述
1.浏览器发送一个https的请求给服务器;
2.服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;
3.服务器会把公钥传输给客户端;
4.客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
5.客户端把加密后的随机字符串传输给服务器;
6.服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);
7.服务器把加密后的数据传输给客户端;
8.客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;

生成ssl密钥对

生成私钥
我们在将私钥放在/usr/local/nginx/conf目录下
生成私钥我们需要用到openssl,查看openssl是通过那个包安装

rpm -qf `which openssl`
openssl genrsa -des3 -out tmp.key 2048 //生成私钥tmp.key,长度为2048

生成的时候需要输入密码并确认
在这里插入图片描述
openssl rsa -in tmp.key -out tx.key //转换key并取消密码
rm -f tmp.key //删除之前生成的key
openssl req -new -key tx.key -out tx.csr //生成证书的请求文件
openssl x509 -req -days 365 -in tx.csr -signkey tx.key -out tx.crt //使用之前生成的私钥和证书来生成公钥

[root@linux-01 conf]# ls -l tx*
-rw-r--r-- 1 root root 1103 5月  18 09:23 tx.crt  //公钥
-rw-r--r-- 1 root root  952 5月  18 09:22 tx.csr  //证书
-rw-r--r-- 1 root root 1675 5月  18 09:20 tx.key  //私钥

Nginx配置ssl

新建一个虚拟配置文件
vim /usr/local/nginx/conf/vhost/ssl.conf
在配置中写入以下内容

server
{
listen 443;
server_name tx.com;
index index.html index.php;
root /data/wwwroot/tx.com;
ssl on;
ssl_certificate tx.crt;
ssl_certificate_key tx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
提示报错,当前nginx不支持ssl
在这里插入图片描述
配置ssl模块,然后编译、安装
进入原文件所在目录
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
make install

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/etc/init.d/nginx restart
查看是否有443监听端口
在这里插入图片描述
vim /etc/hosts //配置hosts
测试,提示证书不合法
在这里插入图片描述
使用web浏览器同样提示证书不合法
在这里插入图片描述

php-fpm的pool

Nginx可以配置多个虚拟主机,php-fpm配置文件php-fpm.conf可以设置多个pool,每个pool可以监听一个端口,在其中一个pool资源耗尽,会导致其他站点无法访问资源,报502错误。有必要把站点进行分离,分别使用单独的pool。

在php-fpm配置文件中添加一个tx.com的池子
vim /usr/local/php-fpm/etc/php-fpm.conf
在配置中写入一下内容

[tx.com]
listen = /tmp/tx.sock
#listen =127.0.0.1:9000
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

/usr/local/php-fpm/sbin/php-fpm -t //检查语法
/etc/init.d/php-fpm reload //重新加载配置文件
查看进程
在这里插入图片描述
修改nginx中的虚拟主机配置
vim /usr/local/nginx/conf/vhost/aaa.com.conf
将以下内容增加到虚拟主机配置文件中

location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/tx.sock; //定义池子  
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
}

单独写每个池子的配置文件

编辑php-fpm主配置文件,在global下加入一行,并将定义的池子删除
include = etc/php-fpm.d/*.conf
在这里插入图片描述
在/usr/local/php-fpm/etc 下创建目录php-fpm.d,并创建新的池子配置
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

[www]
listen = /tmp/php-fcgi.sock
#listen =127.0.0.1:9000
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

vim /usr/local/php-fpm/etc/php-fpm.d/tx.conf

[tx.com]
listen = /tmp/tx.sock
#listen =127.0.0.1:9000
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

/usr/local/php-fpm/sbin/php-fpm -t //检查语法
/etc/init.d/php-fpm reload //重新加载配置文件
查看进程,配置的池子同样生效
在这里插入图片描述

php-fpm慢执行日志

在www.conf配置文件中,增加以下内容

request_slowlog_timeout = 2 //超过2秒就记录
slowlog = /usr/local/php-fpm/var/log/www_slow.log //定义日志的目录

/usr/local/php-fpm/sbin/php-fpm -t //检查语法
/etc/init.d/php-fpm reload //重新加载配置文件
检查日志文件是否生成
在这里插入图片描述
模拟一个慢操作
vim vim /data/wwwroot/test.com/slow.php
写入一下内容

<?php
echo "test slow log";
sleep(3);
echo "done";
?>

curl -x127.0.0.1:80 test.com/slow.php
查看慢日志
在这里插入图片描述

open_basedir

如果一个server有很多个web服务,那么不建议直接把open_basedir直接配置在php.ini中了。Appache可以针对每个虚拟主机设置一个Open_basedir,php-fpm同样也可以针对不同的pool设置不同的Open_basedir.

在池子的配置文件中添加一行
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
在这里插入图片描述
/usr/local/php-fpm/sbin/php-fpm -t //检查语法
/etc/init.d/php-fpm reload //重新加载配置文件
测试

在这里插入图片描述

php-fpm进程管理

在这里插入图片描述

释义
pm = dynamic:动态进程管理.也可以填写static(静态)
pm.max_children = 50 : 静态方式下开启的php-fpm进程数量,当使用静态进程管理时,pm.start_servers,pm.start_servers ,pm.max_spare_servers 配置失效
pm.start_servers = 20 : 动态方式下的起始php-fpm进程数量
pm.min_spare_servers = 5 : 定义在空闲时段,子进程数的最少值
pm.max_spare_servers = 35 : 定义在空闲时段,子进程数的最大值,如果高于这个值,php-fpm服务会清理空闲的子进程
pm.max_requests = 500 :定义一个字进程最多可以处理多少个进程,这里设置成500,也就是说在一个php-fpm的子进程最多可以处理500个,若达到这个数值时,它就会自动退出。
rlimit_files = 1024 :设置文件打开描述符的rlimit限制. 默认值: 系统定义值 系统默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改(临时修改)。

课堂笔记

nginx学习重心
1 负载均衡
https://github.com/aminglinux/nginx/blob/master/proxy/lb.md

2 反向代理
相关缓存设置 https://github.com/aminglinux/nginx/blob/master/proxy/bu_ca.md

引申:正向代理
https://github.com/aminglinux/nginx/blob/master/proxy/z_proxy.md

对于LNMP中的PHP-FPM,两点最核心的技能:
1 学会查php-fpm的slow log
2 学会配置php的错误日志(error_log log_error display_error error_reporting)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值