静态网站:客户端要什么,服务器找什么,找到直接返回给客户端
动态网站:客户端访问网站,服务器找到页面,并识别页面是脚本,就把此脚本执行,然后把执行结果返回给客户端
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
原理:
工作流程
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 永久重定向