lnmp配置3

原文链接: https://my.oschina.net/zenghong133/blog/3051290
  1. Nginx负载均衡
  2. ssl原理
  3. 生成ssl密钥对
  4. Nginx配置ssl
  5. php-fpm的pool
  6. php-fpm慢执行日志
  7. open_basedir
  8. php-fpm进程管理

1. Nginx负载均衡

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
 nginx不支持代理https
 代理服务器可以是443  后端真实服务器不能是443 只能是80

2. ssl原理

SSL工作流程

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

3. 生成ssl密钥对

 cd /usr/local/nginx/conf
 openssl genrsa -des3 -out tmp.key 2048#key文件为私钥
 openssl rsa -in tmp.key -out aminglinux.key #转换key,取消密码 
 rm -f tmp.key
 openssl req -new -key aminglinux.key -out aminglinux.csr#生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件
 openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt
 这里的aminglinux.crt为公钥
 这里的aminglinux.key为私钥

4. Nginx配置ssl

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;
}
 /usr/local/nginx/sbin/nginx -t   检查配置文件是否正确
 /usr/local/nginx/sbin/nginx -s reload   #重新加载
 #报错
 [root@localhost 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
#解决
 需要重新编译nginx,加上--with-http_ssl_module
 查看nginx的版本参数
 [root@localhost conf]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.12.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
configure arguments: --prefix=/usr/local/nginx
 怎么查找我需要的参数
 [root@localhost nginx-1.12.1]# ./configure --help |grep -i ssl
  --with-http_ssl_module             enable ngx_http_ssl_module
  --with-mail_ssl_module             enable ngx_mail_ssl_module
  --with-stream_ssl_module           enable ngx_stream_ssl_module
  --with-stream_ssl_preread_module   enable ngx_stream_ssl_preread_module
  --with-openssl=DIR                 set path to OpenSSL library sources
  --with-openssl-opt=OPTIONS         set additional build options for OpenSSL
#查看监听端口
netstat -lntp |grep nginx
 mkdir /data/wwwroot/aming.com
 echo “ssl test page.”>/data/wwwroot/aming.com/index.html
 编辑hosts,增加127.0.0.1 aming.com
 curl https://aming.com
 windows访问编辑hostos添加 ip yuming

5. php-fpm的pool

vim /usr/local/php-fpm/etc/php-fpm.conf#在[global]部分增加
 include = etc/php-fpm.d/*.conf
 mkdir /usr/local/php-fpm/etc/php-fpm.d/
 cd /usr/local/php-fpm/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-fpm/sbin/php-fpm -t
 /etc/init.d/php-fpm restart
#使用pool方法
location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fcgi.sock;#指定使用哪个pool
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
    }
 fastcgi_pass 用来指定php-fpm监听的地址或者socket

6. php-fpm慢执行日志

#反馈网站慢了?
php的网站
 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
 配置nginx的虚拟主机test.com.conf,把unix:/tmp/php-fcgi.sock改为unix:/tmp/www.sock
 重新加载nginx服务
 vim /data/wwwroot/test.com/sleep.php#写入如下内容
 
 curl -x127.0.0.1:80 test.com/sleep.php 
 cat /usr/local/php-fpm/var/log/www-slow.log

7. open_basedir

vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf #加入如下内容
php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/
 创建测试php脚本,进行测试
 再次更改aming.conf,修改路径,再次测试
 配置错误日志
 再次测试
 查看错误日志

8. 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的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。
#说明
pm = dynamic 动态会自动根据空闲成都增加或者减少进程

pm = dynamic 如果改成 pm = static
pm.max_children = 50 #就只有这一行生效(最大子进程数,ps aux可以查看)

nginx重心
1 负载均衡
2 反向代理
引申:正向代理
重要:对于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/

转载于:https://my.oschina.net/zenghong133/blog/3051290

你可能感兴趣的:(lnmp配置3)