什么是LNMP
LNMP架构是如何工作的
LNMP架构实现原理
安装PHP7.2版本
1. 删除系统默认自带的php5.4版本
rpm -qa |grep php
# php-common-5.4.16-46.1.el7_7.x86_64
# php-5.4.16-46.1.el7_7.x86_64
# php-cli-5.4.16-46.1.el7_7.x86_64
yum -y remove php* &>/dev/null
rpm -qa |grep php
2. 更改yum源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
3. 安装php7.2版本和各种扩展
yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-fpm php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-xml
安装Mariadb数据库
yum -y install mariadb-server mariadb
Fastcgi配置语法
在将Nginx与PHP集成过程中,需要先了解Fastcgi代理配置语法
语法示例
fastcgi_pass localhost:9000; fastcgi服务端的端口号默认为9000,也就是说php-fpm管理进程监听的端口号为9000。
fastcgi_pass unix:/tmp/fastcgi.socket;
语法示例
fastcgi_index index.php
fastcgi_param SCRIPT_FILENAME /index.php
语法示例
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /code$fastcgi_script_name;
配置nginx与php集成
1. 修改配置文件
vim /etc/nginx/conf.d/php.conf
server {
listen 80;
server_name php.nana.com; # 用户发起请求http://php.nana.com:80/,端口号匹配成功,请求路径为/
root /code;
location / {
# /会被第一个location匹配,返回/code/index.php
index index.php index.html;
}
location ~ \.php$ {
# 返回的/code/index.php,会被第二个location匹配
fastcgi_pass 127.0.0.1:9000; # /code/index.php会交给本地的9000端口处理
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 需要解析的文件都会传给变量名SCRIPT_FILENAME,php服务端会读取该变量,解析变量里面的文件内容,解析完成再传给Nginx。
include fastcgi_params;
# 导入文件fastcgi_params(绝对路径/etc/nginx/fastcgi_params),Nginx安装默认自带的配置文件
# 该文件里面保存的是fastcgi协议中系统内置的变量名和变量值,没有该文件参数无法传给php服务端,php会出现空白页面
}
}
2. 启动服务
nginx -t
systemctl restart nginx 启动nginx服务
systemctl start php-fpm 启动php-fpm管理进程
systemctl enable php-fpm 将php-fpm管理进程设为开机自启
- 测试
1. 创建需要返回给浏览器的动态文件
mkdir /code
vim /code/test.php
();
?>
2. 在本机添加域名解析
C:\Windows\System32\drivers\etc
在hosts文件添加域名解析
192.168.15.7 php.nana.com
3. 访问测试
打开浏览器输入http://php.nana.com/test.php,浏览器输出结果为PHP Version 7.2.34。
配置php与mysql集成
1. 启动数据库服务
systemctl restart mariadb 启动mariadb数据库服务
systemctl enable mariadb 将mariadb数据库设为开机自启
2. 创建数据库密码
mysqladmin -u root password "123"
mysql -u root -p123 使用账号密码登陆数据库
3. 准备一个php文件,测试能否正常连接数据库
vim /code/mysql.php
$servername = "localhost";
$username = "root";
$password = "123";
# 创建连接
$conn=mysqli_connect($servername,$username,$password);
# 检查连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php连接Mysql数据库成功";
?>
- 测试
我们在浏览器输入http://php.nana.com/mysql.php,浏览器输出结果为"php连接Mysql数据库成功"表示连接成功,
输出结果为"Connection failed: Access denied for user 'oot'@'localhost' (using password: YES)"表示连接失败。
基于LNMP架构部署Wordpress
Wordpress中文版压缩包
链接:https://pan.baidu.com/s/1xej4Bnql5DzLeFw3qyJIiw
提取码:1234
1. 修改配置文件
vim /etc/nginx/conf.d/blog.nana.com.conf
server {
listen 80;
server_name blog.nana.com;
root /code/wordpress;
# 解决nginx上传文件大小限制
client_max_body_size 100m; # 默认nginx仅支持上传1m大小的文件(超过1m,会报错413)
location / {
index index.php index.html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2. 根据配置文件中定义的内容,创建站点目录,下载wordpress文件
mkdir /code
cd /code
wget https://wordpress.org/latest.tar.gz 下载wordpress压缩包(英文版)
tar -xf wordpress-5.7.1.tar.gz
3. 创建用户www
groupadd -g 666 www 将用户www所属的主群的gid改为666
useradd -u666 -g666 www 创建用户www,将用户www的uid和gid都改为666
4. 修改nginx与php-fpm管理进程的运行用户为www,并授权代码属主和属组都为www。
sed -i "/^user /c user www;" /etc/nginx/nginx.conf
sed -i "/^user /c user = www;" /etc/php-fpm.d/www.conf
sed -i "/^group /c group = www;" /etc/php-fpm.d/www.conf
5. 重启nginx服务和php-fpm管理进程
systemctl restart nginx
systemctl restart php-fpm
6. 修改wordpress文件的属主和属组
chown -R www:www /code/wordpress
ll -d /code/wordpress
# drwxr-xr-x 5 www www 4096 Apr 15 10:08 /code/wordpress
7. 在本机添加域名解析
C:\Windows\System32\drivers\etc
在hosts文件添加域名解析
192.168.15.7 blog.nana.com
创建数据库
mysql -u root -p123 进入数据库
create database wordpress; 创建数据库
# Query OK, 1 row affected (0.00 sec)
show databases; 查看所有的数据库
解决nginx和PHP上传文件大小限制
自定义主题压缩包
链接:https://pan.baidu.com/s/1NNJU_DY-Oeiom2uIVKEe3g
提取码:1234
我们搭建好网站后,可以通过网站的图形化界面上传一些数据包,例如我们可以自定义网页页面主题,如下图所示:
我们发现上传一个的数据包大小超过1M,会出现413的报错信息,如下图所示:
我们可以修改nginx的配置文件,修改Nginx默认上传文件的大小限制来解决这个问题 (注 : PHP默认支持的上传大小为2M)。
- 解决nginx上传文件大小限制
vim /etc/nginx/conf.d/blog.nana.com.conf
server {
...
# 解决nginx上传文件大小限制
client_max_body_size 100m; # 默认nginx仅支持上传1m大小的文件(超过1m,会报错413)
...
}
systemctl restart nginx 重启nginx服务
- 解决PHP上传文件大小限制,本地书写文件大小限制
vim /etc/php.ini
post_max_size = 100M # 上传文件的大小最大100M(第656行)
upload_max_filesize = 100M # 本地书写文件最大写100M(第799行)
基于LNMP架构部署WeCenter知乎
我们之前安装的PHP7.2版本没有安装Mcrypt模块,我们在用浏览器访问页面的时候,服务器环境检查会显示× WeCenter 的加密需要 Mcrypt 支持
。建议使用PHP7.1版本搭建wecenter知乎。
PHP7.1版本压缩包
链接:https://pan.baidu.com/s/1MJSeR2pG_Ur3fPFxoaxcGw
提取码:1234
路漫漫其修远兮,吾将上下而求索
环境准备
- 重新安装PHP7.1版本
1. 删除PHP7.2版本
rpm -qa | grep php
yum -y remove php* &>/dev/null
rpm -qa | grep php
2. 将本地的PHP源码包上传到服务器,解压安装
rz -E php.tar.gz
tar -xf php.tar.gz
yum localinstall -y *.rpm
3. 授权并重启php-fpm管理进程
sed -i "/^user /c user = www;" /etc/php-fpm.d/www.conf
sed -i "/^group /c group = www;" /etc/php-fpm.d/www.conf
systemctl restart php-fpm
部署WeCenter服务
WeCenter压缩包
链接:https://pan.baidu.com/s/1qV5dhq-sy2we6lwRvM_2HA
提取码:1234
1. 修改配置文件
vim /etc/nginx/conf.d/zh.nana.com.conf
server {
listen 80;
server_name zh.nana.com;
root /code/zh;
client_max_body_size 100m;
location / {
index index.php index.html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2. 根据配置文件中定义的内容,下载WeCenter软件
cd /code/
rz -E WeCenter_3-2-1.zip
unzip WeCenter_3-2-1.zip
mv WeCenter_3-2-1 zh
3. 重启nginx服务
systemctl restart nginx
4. 修改zh文件的属主和属组
chown -R www:www /code/zh
5. 在本机添加域名解析
C:\Windows\System32\drivers\etc
在hosts文件添加域名解析
192.168.15.7 zh.nana.com
创建数据库
mysql -u root -p123 进入数据库
create database zh; 创建数据库
# Query OK, 1 row affected (0.00 sec)
show databases; 查看所有的数据库
LNMP架构扩展知识点
fastcgi协议本地文件调用方式传给php服务端
nginx ==》 fastcgi ==》 php-fpm
vim /etc/php-fpm.d/www.conf 将php-fpm监听的端口改成的本地文件
listen = /tmp/php.socket
/etc/nginx/conf.d/nana.com.conf
server{
...
location ~ \.php$ {
fastcgi_pass address:port;
# 127.0.0.1:9000; 通过ip和port的形式进行处理
unix:/tmp/php.socket; 早期通过本地文件路径的形式进行处理(换一种调用方式)
# 早期通过文件的形式进行处理,不需要走tcp协议,效率更高(这种方式nginx和php必须安装在同一台服务器上)
}
...
}
- 现在大部分都是通过ip+port的形式进行处理,这种方式使代码的解耦合性强。
浏览器为什么会出现502报错
Nginx+php与apache+php的区别是什么