第十二章、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进程管理

12.25扩展

 

12.17 Nginx负载均衡

编辑配置虚拟主机文件

vim /usr/local/nginx/conf/vhost/load.conf 

# 写入如下内容:

upstream qq_com

#upstream名字自定义

{

    ip_hash;          

#ip_hash这一行的目的是让同一个用户始终保持在同一台机器上

    server 61.135.157.156:80;

    server 125.39.240.113:80;

}

#server如果不指定端口号,默认80端口

server

{

    listen 80;

    server_name www.qq.com;

    location /

    {

        proxy_pass     http://qq_com;

#这里写的是upstream的名字

        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

 

yum install -y bind-utils       #安装dig命令

#dig命令可以查看域名解析到什么ip地址

用法:dig   域名

dig  qq.com

 

#nginx不支持代理https(端口号443)

 

 

12.18 ssl原理

https与http的区别:

https通信是加密的,防止数据传输过程中被泄露

 

SSL工作流程:

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

 

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

 

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

 

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

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

 

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

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

 

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

 

 

 

12.19 生成ssl密钥对

rpm -qf `which openssl`     #查看openssl是什么包安装的

 

一、生成私钥,设置密码,保存/usr/local/nginx/conf目录下

cd /usr/local/nginx/conf

openssl genrsa -des3 -out tmp.key 2048  

#genrsa表示类型为rsa,tmp.key是私钥的名字,2048是密钥长度

#key文件为私钥

[root@xinlinux-03 vhost]# cd /usr/local/nginx/conf

[root@xinlinux-03 conf]# 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:

 

二、转换key,取消密码,删掉原来key

openssl rsa -in tmp.key -out   xin.key 

#-in 指定密钥转换文件,-out  指定输出的文件

rm -f tmp.key

[root@xinlinux-03 conf]# openssl rsa -in tmp.key -out   xin.key

Enter pass phrase for tmp.key:

writing RSA key

[root@xinlinux-03 conf]# rm -f tmp.key

 

三、生成证书请求文件

openssl req -new -key xin.key -out xin.csr

 

 

四、通过请求文件和私钥一起生产公钥文件

openssl x509 -req -days 365 -in xin.csr -signkey xin.key -out xin.crt

# 这里的xin.crt为公钥

[root@xinlinux-03 conf]# openssl x509 -req -days 365 -in xin.csr -signkey xin.key-out xin.crt

Signature ok

subject=/C=12/ST=Guangzhou/L=Tianhe/O=aiqiyi/emailAddress=1057259293@qq.com

Getting Private key

 

 

12.20 Nginx配置ssl

一、新建ssl.conf,配置ssl

vim /usr/local/nginx/conf/vhost/ssl.conf 

#加入如下内容:!v

server

{

    listen 443;

    server_name xin.com;

    index index.html index.php;

    root /data/wwwroot/xin.com;

    ssl on;

    ssl_certificate xin.crt;

    ssl_certificate_key xin.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

}

 

二、检查语法并重载配置文件

/usr/local/nginx/sbin/nginx  -t

 /usr/local/nginx/sbin/nginx -s reload  

#若报错unknown directive “ssl” ,需要重新编译nginx,加上--with-http_ssl_module,然后make&&make install

[root@xinlinux-03 conf]# /usr/local/nginx/sbin/nginx -t

nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/vhost/ssl.conf:7

nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

 

./configure --prefix=/usr/local/nginx/  --with-http_ssl_module

 

make&&make install

 

netstat  -lntp        #查看是否监听443端口

[root@xinlinux-03 nginx-1.8.0]# netstat  -lntp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11850/nginx: master

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      769/sshd

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      919/master

tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      11850/nginx: master

 

 

三、创建网站目录

mkdir /data/wwwroot/xin.com

 

四、测试

echo "This is ssl test page." >/data/wwwroot/xin.com/index.html

 

• 编辑hosts,增加127.0.0.1 xin.com

vim  /etc/hosts

 

curl https://xin.com/

[root@xinlinux-03 ~]# vim  /etc/hosts

[root@xinlinux-03 ~]# curl https://xin.com/

curl: (60) Peer's certificate issuer has been marked as not trusted by the user.

#出现证书不可信任提示,因为这证书是不合法的,自己做的

 

编辑windows的hosts,增加192.168.233.150   xin.com

 

打开浏览器输入:https://xin.com

#如果访问不了,可能是防火墙问题

 

 

12.21 php-fpm的pool

目的:使用单独不同的pool将所有站点隔离开,防止其中一个站点出现问题从而导致其他站点也出现问题

 

#可以在php-fpm.conf主配置文件内建立多个pool,也可单独pool单独一个conf文件

 

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

#在[global]部分增加如下内容:

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

 

创建/php-fpm.d/目录

• mkdir /usr/local/php-fpm/etc/php-fpm.d/

• cd /usr/local/php-fpm/etc/php-fpm.d/

 

配置www.conf的pool

vim www.conf 

#内容如下:

[www]

listen = /tmp/www.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

 

•编辑xin.conf的pool

• vim xin.conf 

#内容如下

[xin]

listen = /tmp/xin.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

 

检查语法并重启php-fpm配置文件

/usr/local/php-fpm/sbin/php-fpm –t

• /etc/init.d/php-fpm restart

[root@xinlinux-03 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t

[27-Sep-2018 10:05:23] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

 

[root@xinlinux-03 php-fpm.d]# /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

 

ps aux |grep  php-fpm           #查看php-fpm的pool情况(在最右侧)

 

需要使用pool的话,只需要在网站server配置文件修改为pool对应的sock文件,即可将多个网站隔离开

 

 

12.22 php-fpm慢执行日志

目的:搭建php网站用LNMP时,可以分析php-fpm慢执行日志,可以找出网站访问变慢的原因

一、编辑www.conf配置文件

•vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

#加入如下内容

request_slowlog_timeout = 1

#超过一秒就会纪录日志(一般都会设置1~2秒之间)

slowlog = /usr/local/php-fpm/var/log/www-slow.log

 

二、 配置nginx的虚拟主机test.com.conf,(因为www.conf的sock文件是www.sock)

unix:/tmp/php-fcgi.sock改为unix:/tmp/www.sock

 

 

三、检查语法并重载nginx服务

/usr/local/nginx/sbin/nginx  -t

/usr/local/nginx/sbin/nginx  -s reload

 

四、测试

• vim /data/wwwroot/test.com/sleep.php

#写入如下内容

<?php 

echo "test slow log";

sleep(2);

echo "done";

?>

#休眠2秒钟

 

• curl -x127.0.0.1:80 test.com/sleep.php

• cat /usr/local/php-fpm/var/log/www-slow.log

[root@xinlinux-03 php-fpm.d]# cat /usr/local/php-fpm/var/log/www-slow.log

 

[27-Sep-2018 10:33:23]  [pool www] pid 12132

script_filename = /data/wwwroot/test.com/sleep.php

[0x00007f411ea4f270] sleep() /data/wwwroot/test.com/sleep.php:3

#显示是哪个文件慢,第几行慢;这里是sleep.php的第三行慢,超过一秒都会纪录

 

 

12.23 open_basedir

#通过pool限定网站目录

适用定义位置:Apache虚拟主机配置文件或者php-fpm配置文件 

 

#open_basedir后面接的是要限定的网站目录路径,路径不对就访问不了

 

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

#加入如下内容

php_admin_value[open_basedir]=/data/wwwroot/www.com:/tmp/

 

• 创建测试php脚本,进行测试

curl -x127.0.0.1:80 test.com/sleep.php -I

[root@xinlinux-03 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I

HTTP/1.1 404 Not Found

Server: nginx/1.8.0

Date: Thu, 27 Sep 2018 02:54:10 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

X-Powered-By: PHP/5.6.32

 

#因为basedir不对,现在将basedir改为test目录下

[root@xinlinux-03 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php

test slow logdone

[root@xinlinux-03 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I

HTTP/1.1 200 OK

Server: nginx/1.8.0

Date: Thu, 27 Sep 2018 02:56:28 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

X-Powered-By: PHP/5.6.32

 

两种查错方法:

第一种:开启php-fpm.ini文件的display_error,通过curl后显示的错误信息查找

vim  /usr/local/php-fpm/etc/php.ini

display_errors = on

 

第二种:通过查看错误日志排错

 1、配置错误日志

vim  /usr/local/php-fpm/etc/php.ini

指定错误日志位置

error_log=/usr/local/php-fpm/var/log/php_errors.log

指定日志级别

error_reporting = E_ALL

 

2、然后检查语法并重载配置

/usr/local/php/sbin/php-fpm –t

 /etc/init.d/php-fpm reload

 

3、再次测试

 

4、 查看错误日志

 

 

12.24 php-fpm进程管理

#配置pool的内容

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的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。

 

#如果是pm=static时,只有两句会生效,其他的都不会生效

pm = static               

pm.max_children = 50 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值