LNMP+FastCGI

静态网站:客户端要什么,服务器找什么,找到直接返回给客户端

动态网站:客户端访问网站,服务器找到页面,并识别页面是脚本,就把此脚本执行,然后把执行结果返回给客户端

LNMP(linux+nginx+mysql+php)

1、装包

nginx

mariadb(连服务端的客户端软件,方便服务器端自己查数据)、mariadb-server(存数据的服务器)、mariadb-devel(依赖包)

php(解释器)、php-mysql(扩展模块包,主要功能是支持php连接数据库)、php-fpm(此包是把php当成一个服务)

2、启动服务

nginx     #启动nginx

systemctl    start   php-fpm    #启动php-fpm服务

systemctl    start   mariadb     #启动数据库服务

备注:nginx端口是80,php端口是9000,mariadb端口是3306

nginx实现动静分离:

判断1、如果客户端访问的是静态页面,则nginx开始寻找页面,找到直接返回给客户端,找不到报404错误。

判断2、如果客户端访问的是动态页面,则nginx开始寻找页面,找到转发给php(9000),php执行把结果返回给nginx,nginx再返回给客户端,找不到报404错误。

FastCGI

原理:

FastCGI.png

工作流程

1、web server启动时加载fastcgi进程管理器

2、fastcgi进程管理器初始化,启动多个解释器进程

3、当客户端请求到达web server时,fastcgi进程管理器选择并连接到一个解释器

4、fastcgi子进程完成处理后返回结果,将标准输出和错误信息从同一连接返回web server

缺点

内存消耗大

因为是多进程,所以cgi多线程消耗更多服务器内存,php-cgi解释器每个进程消耗7至25兆内存

nginx+php(fastcgi)服务器载3万并发连接下

开10个nginx进程消耗150兆内存(10*15M)

开64个php-cgi进程消耗1280M内存(64*20M)

配置FastCGI (进行优化,加大并发量时需要修改此文件)

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

[www]

listen = 127.0.0.1:9000 //PHP端口号

pm.max_children = 32 //最大进程数量

pm.start_servers = 15 //最小进程数量

pm.min_spare_servers = 5 //最少需要几个空闲着的进程

pm.max_spare_servers = 32 //最多允许几个进程处于空闲状态

location 可以匹配用户地址栏

   (1)      location    /    {    };

   (2)      location    /test    {    };

firefox http://192.168.4.5/ 匹配第一个location

firefox http://192.168.4.5/test 匹配第二个location

location支持正则,例如:location ~ .php$ { };

备注:~代表正则, .php$ 表示以.php结尾

location ~ .php$ { #正则匹配地址栏里以php结尾的页面

        root           html;   #根目录是html

        fastcgi_pass   127.0.0.1:9000;   #找到以php结尾的文件转交给php服务

        fastcgi_index  index.php;  #动态默认页面文件

        include        fastcgi.conf;  #加载fastcgi.conf配置文件  

    }

重启nginx并测试

Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log

Nginx的默认错误日志文件为/usr/local/nginx/logs/error.log

PHP默认错误日志文件为/var/log/php-fpm/www-error.log

如果动态网站访问失败,可用参考错误日志,查找错误信息。

常见错误及排错方法:

1、出现下载页面—–>没做动静分离

2、空白页面—–>php代码写错

3、an error 或者 无法连接—–>没有启动php-fpm和nginx服务

地址重写

所有访问a.html的请求,重定向到b.html;

在location里面添加   rewrite    /a.html    /b.html    redirect(加此选项是地址栏里也跟着显示b.html);

所有访问192.168.4.5的请求重定向至www.tmooc.cn;

在server里面添加  rewrite    ^/    http://www.tmooc.cn;

所有访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面;

在server里面添加  rewrite    ^/(.*)    http://www.tmooc.cn/$1;  ()代表复制,$1代表粘贴前面的内容

实现firefox与curl访问相同页面文件,返回不同的内容。

server {

    listen       80;

    server_name  www.b.com;

    if ($http_user_agent  ~* firefox) {      备注:~支持正则  *忽略大小写

    rewrite ^/(.*)  /firefox/$1;

    }

    location / {

        root   www;

        index  index.html index.htm;

    }

}

rewrite 旧地址 新地址 [选项]

last 不再读其他rewrite

break 不再读其他语句,结束请求

redirect 临时重定向

permament 永久重定向

猜你喜欢

转载自blog.csdn.net/weixin_42796092/article/details/81209776