保障4-0518任务打卡

任务列表:
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进程管理

12.17 Nginx负载均衡

  • 核心配置
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;
    }
}

  • 以上是qq的负载均衡配置
  • upstream 用来存放多个服务器地址,分担访问压力。
  • ip_hash的作用是让一个用户一直登录一台服务器。
  • prosy_pass 在http://后添加upstream 的名称。
  • nginx只支持80端口或其他端口,但不支持443端口

12.18 ssl原理

11-32.png

1,发送请求至服务器

2,服务器有一套数字证书。其实就是一对公钥与私钥。

  • 可以向组织申请,在花费一笔费用后得到浏览器认可的数字证书。
  • 也可以自己制作,但是自己制作的证书不被浏览器认可,会弹出警告信息。

3,服务器把请求的公钥回应给客户端。

4,客户端浏览器会判断收到的公钥是否和法。

  • 如果无效会弹出警告信息
  • 如果验证有效,会生成一串随机key。并用收到的公钥进行加密

5,传送加密后的随机key至服务器。

6,服务器收到加密的随机key。

  • 首先通过证书的私钥对加密后的随机key解密,得到了客户端的随机key.
  • 然后通过解密后的随机key,对网页进行加密。

7,将使用随机key加密的网页回传给客户端浏览器。

8,客户端通过自己的随机key对网页解密。

12.19 生成ssl密钥对

1,约定:把密钥都放到/usr/local/nginx/conf目录下

cd /usr/local/nginx/conf

2,生成私钥文件

[root@lnmp ~]# openssl genrsa -des3 -out tmp.key 2048
Generating RSA private key, 2048 bit long modulus
...........................................+++
......+++
e is 65537 (0x10001)
Enter pass phrase for tmp.key:
Verifying - Enter pass phrase for tmp.key:
  • openssl工具如果没有安装可以通过yum install -y openssl来安装
  • tmp.key是这个临时私钥的名称 2048是加密长度
  • 输入两次密码后,这个私钥就生成了。但是我们的一般是不需要密码的。以下为取消密码的方法:
[root@lnmp conf]# openssl rsa -in tmp.key -out aminglinux.key
Enter pass phrase for tmp.key:
writing RSA key
[root@lnmp conf]# rm -f tmp.key 
  • 输入密码后会得到一个取消密码的私钥aminglinux.key。
  • 结束后删除临时key文件。

3,生成证书请求文件

[root@lnmp conf]# openssl req -new -key aminglinux.key -out aminglinux.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:10  
State or Province Name (full name) []:taiyuan
Locality Name (eg, city) [Default City]:shanxi
Organization Name (eg, company) [Default Company Ltd]:xy
Organizational Unit Name (eg, section) []:xyz
Common Name (eg, your name or your server's hostname) []:sapwin.com
Email Address []:sapwin@qq.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
  • aminglinux.csr就是证书请求文件
  • 除了密码(password)外其他内容可以随便填写。

4,生成公钥文件

[root@lnmp conf]# openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt
Signature ok
subject=/C=10/ST=taiyuan/L=shanxi/O=xy/OU=xyz/CN=sapwin.com/emailAddress=sapwin@qq.com
Getting Private key
  • 这里的aminlinux.crt就是公钥文件
  • 命令里的365是指有效期

12.20 Nginx配置ssl

1,核心配置

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

  • 如果编译nginx时没有加载ssl模块,那么这时是无法通过检测的。

2,编译时加载ssl模块。

cd /usr/local/src/nginx-1.14.2/
./configure --help|grep -i ssl
  • 用这个命令可以查询如何在编译时加载ssl模块
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install

3,测试

  • curl测试
[root@lnmp nginx-1.14.2]# curl https://ssl.com
curl: (60) Peer's certificate issuer has been marked as not trusted by the user.
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
  • 出现上边的提示说明测试成功,但是证书不合法。
  • web测试
  • 首先要开放443端口的监听iptables -I INPUT -p tcp --dport 443 -j ACCEPT
    11-33.png
  • 不安全说明证书未通过官方认证。

12.21 php-fpm的pool

1,pool的作用

  • 不同的站点使用不同的pool时,可以使用各自独立的php资源。

2,直接在主配置文件(/usr/local/php-fpm/etc/)中配置pool

vim /usr/local/php-fpm/etc/php-fpm.conf
  • 以[]中括号为开头,写配置。例如:
[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
  • global就是全局配置
  • www就是其中的一个pool的名称
  • 如果有需要可以在下边直接继续写新的pool配置

3,以文件的方式管理pool

  • 首先在/usr/local/php-fpm/etc/php-fpm.conf中定义pool配置文件的路径
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
include = etc/php-fpm.d/*.conf
  • 只保留global,其他pool全部删除。因为现在要以文件的方式配置pool
  • include就是定义了配置文件的路径和配置文件的后缀
  • 配置文件只能在/etc/的子目录下创建
  • pool文件内容的写法和直接在主配置文件中的写法一致,尤其是开头的[]中括号的pool名称不能省略。

4,配置站点的php解析

  • 打开虚拟主机配置文件
  • fastcgi_pass unix:这一行里指定php的监听文件或端口。

12.22 php-fpm慢执行日志

1,配置慢执行日志

  • 在pool配置内添加以下内容
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
  • 执行时长超过1秒的操作被视为慢执行
  • 执行的内容会被记录到slowlog配置的目录中

2,测试

  • 网站根目录下新建一个slow.php文件
vim /data/wwwroot/sapwin.com/slow.php
  • 写入如下内容:
<?php
 echo "test slow log";
 sleep(2);
 echo "done";
?>
  • 执行curl -127.0.0.1:80 aaa.com/slow.php
  • 查看/usr/local/php-fpm/var/log/www-slow.log文件内容
[19-May-2019 13:45:19]  [pool www] pid 4222
script_filename = /data/wwwroot/sapwin.com/slow.php
[0x00007fead512d288] sleep() /data/wwwroot/sapwin.com/slow.php:3
  • 第一行告诉我们哪一个pool出了问题。第二行告诉我们哪一个文件出了问题。第三行告诉我们这个文件的哪一行出了问题。
  • 结果就是第三行执行慢

12.23 open_basedir

1,使用open_basedir是为了防止php-fpm用户访问非站点目录,导致安全问题。

2,配置open_basedir

php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/
  • 在pool内加入这样一条,就会把访问权力限制在对应的目录里

3,测试

  • 在/usr/local/php-fpm/etc/php.ini中定义error_log文件
  • 并且把log_errors选项打开,以方便查看php-fpm的错误日志
  • 生成对应的错误日志文件,并把权限改为777保证写入
[root@lnmp etc]# touch /usr/local/php-fpm/var/log/phperrors.log
[root@lnmp etc]# chmod 777 /usr/local/php-fpm/var/log/phperrors.log
  • 重启php
  • 故意把open_absedir配置错误。
  • 查看错误日志
[root@lnmp etc]# cat /usr/local/php-fpm/var/log/phperrors.log
[19-May-2019 07:07:43 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/wwwroot/sapwin.com/1.php) is not within the allowed path(s): (/data/wwwroot/aming.com:/tmp/) in Unknown on line 0
[19-May-2019 07:07:43 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0

  • 说明/data/wwwroot/sapwin.com/1.php并不在允许的路径内 (/data/wwwroot/aming.com:/tmp/)

12.24 php-fpm进程管理

  • php-fpm的进程管理也是pool管理的一部分,通过编辑php-fpm.conf文件来实现。
  • pm = dynamic //动态进程管理,也可以是static
    当定义为static时,只有下边pm.max_children最大进程数和pm.start_servers启动进进程数会生效。
  • 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的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。

直播笔记

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)

扩展
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/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值