2018.9.13日,预习笔记,LNMP架构(三)

笔记目录

  1. Nginx负载均衡
  2. ssl原理
  3. 生产ssl密钥对
  4. Nginx配置ssl
  5. php-fom的pool
  6. php-fpm慢执行日志
  7. open_basedir
  8. php-fpm进程管理
  9. 扩展 
    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负载均衡

03ddc5fe077eb66ed64e1afb1e59ec4b57d.jpg

示例一:

  • 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;    

  }

}  

  • upstream来指定多个web server
  • yum install -y bind-utils  安装该包
  • 使用dig 查询出域名解析了哪些ip

b584fb943f6b573d9ef3cc30d39fe69953d.jpg

  • Nginx不支持代理https,只支持代理http,新版本支持代理tcp

 

二.ssl原理

df1ad588c0dbb6d8cd9288bfe606e464e9d.jpg

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

 

三.生产ssl密钥对

815c18dc23c91bf5d86ccec534c1141b71f.jpg

示例一:

  • yum install openssl 安装包
  • cd /usr/local/nginx/conf
  •  openssl genrsa -des3 -out tmp.key 2048//key   ,生成rsa形式的密钥,文件为私钥  

d74e65251e7ebb490a831cda2fd5e832122.jpg

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

fbc5a718a91e1781e2e4029767a902a92d2.jpg

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

cee9b75700029d5e0aacae203b0df930f5f.jpg

 

  • openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt  生成公钥,用生成的请求文件和私钥生成

f8b5c319b2811de8f3b6d875a509b3b81de.jpg

  • ls 看一下

29c82105232a3f720be46a472f0b4d63be1.jpg

  • 这里的aminglinux.crt为公钥

 

四.Nginx配置ssl

6dde156a1f0c60351b801a9951e22a8996f.jpg

示例一:

  •  vim /usr/local/nginx/conf/vhost/ssl.conf//加入如下内容

server

{    

listen 443;    

server_name aming.com;    

index index.html index.php;    

root /data/wwwroot/aming.com;    

ssl on;    

ssl_certificate aminglinux.crt;    指定公钥

ssl_certificate_key aminglinux.key;    指定私钥

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  协议,一般三种协议都配置上

}

  • mkdir /data/wwwroot/aming.com 创建root定义的目录
  • -t && -s reload //若报错unknown directive “ssl” ,需要重新编译nginx,加上--with-http_ssl_module  

297285b39a9dfa038d5dae093feb3a15edc.jpg

  • cd /usr/local/src/nginx-1.12.1/ 进去Nginx源码包下

227340cd6284da57b4f3c22fc19e4366722.jpg

  • ./configure --prefix=/usr/local/nginx --with-http_ssl_module   编译该模块

e0ddb3163c8f6ff0dd1ad4cba3f7a037a93.jpg

  • make && make install 
  • 查看一下

5ff1c2aa515e426cb1439041e9d4bc1842e.jpg

  • -t &&restare 检测语法,并且重启一下Nginx 

9926ffbef52deebb1628b4d009b1d1b7602.jpg

  • 查看一下443端口是否监测

44aa9d3f47e52711cf18c5cba19e2cbfd48.jpg

  • mkdir /data/wwwroot/aming.com  创建一个目录
  • echo “ssl test page.”>/data/wwwroot/aming.com/index.html 创建一个测试文件
  • vi /etc/hosts
  • 编辑hosts,增加127.0.0.1 aming.com  

a3e198b8a7eefcf1b7b1ebddc1278566b9f.jpg

  • curl https://aming.com/ 测试一下

749585571db7700bab6cd1b50668bef7570.jpg

 

五.php-fom的pool

2db48fe4db83c2c28f444d3c3efd9ec4e18.jpg

fe0c1b85ea244638a1bbf7435fd0b0a5aa3.jpg

示例一:配置多个池子

  • cd /usr/local/php-fpm/etc/
  • ls &&cat php-fpm.conf

548169211f8d05d89ed87c3633ab39efc5a.jpg

  •  vim /usr/local/php/etc/php-fpm.conf//在[global]部分增加  
  • include = etc/php-fpm.d/*.conf  
  • mkdir /usr/local/php/etc/php-fpm.d/  
  • cd /usr/local/php/etc/php-fpm.d/  
  • 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

  • 继续编辑配置文件  
  • vim aming.conf //内容如下

[aming]

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

  • /usr/local/php/sbin/php-fpm –t  检测语法
  • /etc/init.d/php-fpm restart    重启php-fpm服务

 

六.php-fpm慢执行日志

13c570b515c3dc6d950dfe1fdefac87a991.jpg

示例一:

  • 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  定义日志存放位置

47823adeed4bec29e0951dca711acb10887.jpg

  • -t &&reload 测试语法并重新加载配置文件

d90d32dae9f02227d216b6469ed5961ef2e.jpg

  • cat 一下,看看日志文件是否生成

1ce56824d470f59b1edd2d228bee6ea1522.jpg

  • 配置nginx的虚拟主机test.com.conf,把unix:/tmp/php-fcgi.sock改为unix:/tmp/www.sock  重新加载nginx服务  

09545fc0911d0cf6663ee03a253139ba2b6.jpg

  • 做一个测试php文件
  • vim /data/wwwroot/test.com/sleep.php//写入如下内容

<?php

echo “test slow log”;

sleep(2);

echo “done”;

?>  

  • curl -x127.0.0.1:80 test.com/sleep.php  运行测试一下
  • cat /usr/local/php-fpm/var/log/www-slow.log  查看一下日志

9aba4a0265cbca91bf854083055ea3b0825.jpg

  • 定义的时候,最好定义为2秒,因为很多php的执行脚本都超过1秒,这样记录的日志就会少很多,一般定义为1~2秒。

示例二:拓展,如果语法报错,想看到详细错误内容的话,可以开启display_errors的一项功能

  • vim /usr/local/php-fpm/etc/php.ini 在它的配置文件里配置更改一下
  • /display_errors 搜索一下,如下,将它设置为on开启状态

252586fd458ece69aedae54b506c624eb42.jpg

  • reload 重新加载配置文件

ef56fde38a76186805fd42b39fb1aaf4eb9.jpg

  • 再次执行语法出错的文件
  • 就可以看到详细的日志错误信息

72c3517667a65faec73c762bf03b265285d.jpg

 

七.open_basedir

833d158ebcdd80d3dfe43cf43fd6d3faa26.jpg

示例一:

  • vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf//加入如下内容php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/  

cecb467cbec2964d9d29328b1ac4a2a40e6.jpg

  • /etc/init.d/php-fpm restart 重启一下php-fpm服务
  • 创建测试php脚本,进行测试  
  • 再次更改aming.conf,修改路径,再次测试  
  • 配置错误日志  
  • vi /usr/local/php-fpm/etc/php.ini  如下编辑

52b61a7c97f9eab22d6b065b9b6e2081ff1.jpg

  • vi /usr/local/php-fpm/etc/php.ini  如下编辑

8c25d816d89348ec67ce334bc126cf3a3ed.jpg

  • 手动创建日志生成文件,并且更改权限为777,然后重启一下php-fpm

696142d11afb0aeee0c34da4d9d494db2f7.jpg

  • 用curl再次测试  
  • 查看错误日志

4ec5e9a1dff069cd1517941226464e9681f.jpg

 

八.php-fpm进程管理

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

 

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

 

 

 

 

转载于:https://my.oschina.net/u/3912766/blog/2050816

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值