视频中的配置环境:
一台前端代理服务器nginx,一台后端服务器(配置成fpmserver,mysql server)
前端代理nginx作为web server,自己处理静态内容,有关php的动态内容发往后端服务器

后端服务器
yum install -y php-fpm php-mysql php-mbstring php-mcrypt mariadb-server---安装程序包
ifconfig eno16777736 192.168.10.11/24 up
vim /etc/php-fpm.d/www.conf---修改fpm配置文件
修改下列行
listen = 0.0.0.0:9000---监听所有地址的9000端口
;listen.allowed_clients =127.0.0.1---添加分号就是注释掉这一行,允许所有主机访问
user = apache---应该修改为nginx允许的用户,但是会自动创建,所以没有修改
pm = dynamic---pm进程使用动态方式
pm.max_children = 50---最大进程数为150个
pm.start_servers = 5---启动进程有几个
pm.min_spare_servers = 5---最小空闲几个进程
pm.max_spare_servers = 35---最大空闲几个进程
pm.max_requests = 500---每一个进程处理多少个请求后要重启
pm.status_path = /status---pm有自己的status路径
ping.path /ping---健康状态监测路径
php_value[session.save_handler] = files---确保能基于文件的方式来保存session
php_value[session.save_paht] = /var/lib/php/session---session保存路径,以apache用户运行,有可能不会自动创建,需要自己创建

mkdir /var/lib/php/session
chown apache:apache /var/lib/php/session---修改用户跟运行fpm进程的用户保持一致&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&不明白
systemctl start php-fpm.service
ss -tnl---可以看到监听了9000端口

反代服务器定义好了虚拟主机,并且定义好了传递的参数,在后端主机上就创建目录
mkdir -pv /data/apps
vim /data/apps/index.php
<?php
phpinfo();
?>
---------------------------------------启动mariadb服务
vim /etc/my.cnf.d/server.cnf---添加下列几行
skip_name_resolve=ON---关闭地址解析
innodb_file_per_table=ON
systemctl start mariadb.service---启动mariadb服务
ss -tnl---查看3306端口是否启动
mysql---连接到mysql,并且要确保root用户有密码
mysql_secure_installation---设置密码,会弹出交互式对话
mysql -uroot -pmagedu---登录mysql
---------------------------------------部署一个应用
tar xf phpMyAdmin-4.0.10.20-all-languages.tar.gz -C /data/apps/
cd /data/apps/
ln -sv phpMyAdmin-4.0.10.20-all-languages pma---链接至pma
cd pma/
cp config.sample.inc.php config.inc.php
vim config.inc.php---修改下面这一行
scfg['blowfish_secret'] = 'akdljio8b7c6d';
scp phpMyAdmin-4.0.10.20-all-languages.tar.gz 192.168.10.254:/root/---复制到nginx反代服务器
cd pma/
外部主机访问www.ilinux.io/pma/index.php可以看到动态的页面但看不到静态的图片


反代服务器
为了区分,上一节课的ilinux.conf改名为iunix.conf
vim conf.d/iunix.conf
server {
listen 80;
server_name www.iunix.io;
proxy_cache pcache;
proxy_cache_key $request_uri;
proxy_cache_methods GET HEAD;
proxy_cache_valid 200 301 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale http_502;

location / {
    proxy_pass http://192.168.10.11:80/;
    proxy_set_header X-Real-IP $remote_addr;
    add_header X-Via $server_addr;
}

location ~* \.(jpg|jpeg|png)$ {
    proxy_pass http://192.168.10.12:80;
}

}
自己新建一个虚拟主机
vim conf.d/iunix.conf
server {
listen 80;
server_name www.ilinux.io;
index index.php index.html;

location / {
    root /data/nginx/html;
}

location ~* \.php$ {---所有以.php结尾的内容都反代给后端主机
    fastcgi_pass 192.168.10.11:9000;---因为是fastcgi协议,所以url上不加http
    fastcgi_index index.php;
    include fastcgi_params;---下边一行只是修改了一个参数,还需要包含进来这个文件中的所有参数,并且要先写这一行
    fastcgi_param SCRIPT_FILENAME   /data/apps/$fastcgi_script_name;

}

}
nginx -t
nginx -s reload
nginx通过fastcgi协议反代还需要传递很多参数给后端服务器,在/etc/nginx/fastcgi_params中,一般不修改这个文件,而是在虚拟主机的配置文件中修改。
在这个文件中如何传递:
fastcgi_param SCRIPT_NAME /data/apps/$fastcgi_script_name;

反代编辑一个html主页用于测试
vim /data/nginx/html/index.html

Nginx Server


此时客户端访问www.ilinux.io,反代服务器会响应,如果访问www.ilinux.io/index.php,就会反代给后端主机

tar xf phpMyAdmin-4.0.10.20-all-languages.tar.gz -C /data/nginx/html/
cd /data/nginx/html/
ln -sv phpMyAdmin-4.0.10.20-all-languages pma---链接至pma
cd pma/
外部主机访问www.ilinux.io/pma/index.php就可以看到动态的页面以及静态的图片了
输入用户名密码就可以进入管理数据库的页面


然后,拓扑架构改变了,变为前端一个nginx反代,后端RS2:一台nginx提供web,RS1:一台php
RS2:
ifconfig eno16777736 192.168.10.12/24 up
从前端nginx反代复制/etc/yum.repos.d/epel.repo以及phpMyAdmin-4.0.10.20-all-languages.tar.gz
yum install -y nginx
mkdir -pv /data/nginx/html
tar xf phpMyAdmin-4.0.10.20-all-languages.tar.gz -C /data/nginx/html/
ln -sv phpMyAdmin-4.0.10.20-all-languages pma
vim /etc/nginx/nginx.conf---修改默认server的root路径为/data/nginx/html;
nginx -t
systemctl start nginx.service

前端反代:
vim conf.d/ilinux.conf
server {
listen 80;
server_name www.ilinux.io;
index index.php index.html;

location / {
    root /data/nginx/html;
    proxy_pass http://192.168.10.12:80;
}

location ~* \.php$ {
    fastcgi_pass 192.168.10.11:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /data/apps$fastcgi_script_name;
}

}
nginx -t
nginx -s reload
然后客户端主机刷新网页(www.ilinux.io/pma/index.php),会发现动态网页静态图片仍然是可以访问的
tail /var/log/nginx/access.log---可以通过访问日志查看是否访问的本主机的静态图片

fastcgi协议也是可以开启缓存的。
vim nginx.conf
在http上下文中,proxy_cahe_path下面添加一行
fastcgi_cache_path /data/nginx/fcgicache levels=2:1 keys_zone=fcache:10m max_size=2g;
vim conf.d/ilinux.conf
server {
listen 80;
server_name www.ilinux.io;
index index.php index.html;

location / {
    root /data/nginx/html;
    proxy_pass http://192.168.10.12:80;
}

location ~* \.php$ {
    fastcgi_pass 192.168.10.11:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /data/apps$fastcgi_script_name;
    fastcgi_cache fcache;
    fastcgi_cache_key $request_uri;
    fastcgi_cache_valid 200 302 10m;
    fastcgi_cache_valid 301 1h;
    fastcgi_cache_valid any 1m;
}

}
然后客户端可以curl三次,就会生成缓存,可以查看下到底有没有生成缓存。
ls /data/nginx/fcgicache/

视频中的课件:
ngx_http_fastcgi_module模块:
The ngx_http_fastcgi_module module allows passing requests to a FastCGI server.
1、fastcgi_pass address;
a***ess为fastcgi server的地址;location,if in location;
http://www.ilinxu.io/admin/index.php-->/admin/index.php(uri),此uri对应的文件在哪个路径下呢?
后端主机真实路径/data/application/admin/index.php,应该定义/data/appllication
2、fastcgi_index name;
fastcgi默认的主页资源;
3、fastcgi_param parameter value [if_not_empty];
Sets a parameter that should be passed to the FastCGI server.The value can contain text,varlables,and their combination.
配置示例1:
前提:配置好fpm server和mariadb-server服务;
location ~ .php$ {
root /usr/shar/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
配置示例2:通过/pm_status和/ping来获取fpm server状态信息;
location ~
.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
4、fastcgi_cache_path path [levels=levels] [use_temp_path=on|off]......
定义fastcgi的缓存:缓存位置为磁盘上的文件系统,由path所指定路径来定义;
levels=levels:缓存目录的层级数量,以及每一级的目录数量;levels=ONE:TWO:THREE
levels=1:2:2
keys_zone=name:size
k/v映射的内存空间的名称及大小
inactive=time
非活动时长
max_size=size
磁盘上用于缓存数据的缓存空间上限
5、fastcgi_cache zone | off
调用指定的缓存空间来缓存数据;http,server,location
6、fastcgi_cache_key string;
定义用作缓存项的key的字符串;
7、fastcgi_cache_methods GET|HEAD|POST...;
为哪些请求方法使用缓存;
8、fastcgi_cache_min_uses number;
缓存空间中的缓存项在inactive定义的非活动时间内至少要被访问到此处所指定的次数方可被认作活动项;
9、fastcgi_cache_valid [code ...] time;
不同的响应码各自的缓存时长;
示例:
10、fastcgi_keep_conn on | off---发请求时保持
fastcgi server默认是发完连接就关闭了(短连接模式),设置为on,nginx会告诉fastcgi server不要关闭连接

博客作业:以上所有内容:
练习:实现lnmp,lnamp提供多个虚拟主机;nginx和php使用同一主机和不同主机;
(1)http,提供wordpress;
(2)https,提供pma