[toc]
lnmp平台
1.lnmp简介
LNMP就是Linux+Nginx+MySQL+PHP,Linux作为服务器的操作系统,Nginx作为Web服务器、PHP作为解析动态脚本语言、MySQL即为数据库。
-
Linux作为服务器的操作系统。
-
Nginx作为WebServer服务器。
-
PHP 作为动态解析服务(php)。
-
MySQL作为后端存储数据库服务。
2.fastcgi协议
Nginx服务本身不能处理PHP的请求,用户发起PHP动态请求, Nginx处理过程如下
用户-->http协议-->Nginx-->fastcgi协议-->php-fpm
fastcgi是nginx连接php-fpm之间的协议
nginx结合PHP FastCGI运行原理图
1.用户发起的所有请求会先抵达LNMP架构中的Nginx
2.如果用户请求的是静态内容,则Nginx直接响应并处理
3.如果用户请求的是动态内容,则通过fastcgi协议发送至php-fpm管理进程
4.php-fpm接收到请求后,会派生对应的wrapper线程,来解析用户请求的动态内容
5.如果涉及到查询数据库操作,则需要php先连接数据库,然后进行查询操作(php-mysql)
6.最终由mysql-->php-fpm->fastcgi->nginx->client
3.搭建lnmp平台
3.1 安装nginx
3.1.1 下载安装包并安装
wget https://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm
yum -y localinstall nginx-1.18.0-1.el7.ngx.x86_64.rpm
3.1.2 创建www用户并把nginx运行用户修改为www
useradd -u www -M -s /sbin/nologin
sed -i.bak '/user nginx;/cuser www;' /etc/nginx/nginx.conf
3.1.3 启动nginx并设置开机自启
systemctl enable nginx && systemctl start nginx
3.2 安装mysql
3.2.1 下载安装包并安装
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.20-1.el7.x86_64.rpm-bundle.tar
yum -y localinstall *.rpm
3.2.2 启动mysql并设置开机自启
systemctl enable mysqld && systemctl start mysqld
3.2.3 从/var/log/mysqld.log
中找到mysql8的默认roo密码
$ grep 'root@localhost' /var/log/mysqld.log
2020-06-21T00:46:49.942011Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: jB6wzV<ZJIG9
3.2.4 修改root密码
mysql8中密码要求为要包含大写字母,小写字母,数字,特殊符号
在MySQL 8.04前,执行:SET PASSWORD=PASSWORD('[新密码]');
修改密码
但是MySQL8.0.4开始,这样默认是不行的。因为之前,MySQL的密码认证插件是mysql_native_password
,而现在使用的是caching_sha2_password
。
mysql8.0.20初次修改root密码需要用如下命令
mysql> alter user user() identified by 'Bxb123.com';
Query OK, 0 rows affected (0.00 sec)
查看mysql8.0.20密码策略
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
validate_password.length 固定密码的总长度;
validate_password.dictionary_file 指定密码验证的文件路径;
validate_password.mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
validate_password.number_count 整个密码中至少要包含阿拉伯数字的个数;
validate_password.policy 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password.policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
如果需要设置空密码或者简单密码
设置空密码
mysql> UNINSTALL COMPONENT "file://component_validate_password";
Query OK, 0 rows affected (0.00 sec)
mysql> set password='';
Query OK, 0 rows affected (0.00 sec)
设置简单密码
#设置密码的验证强度等级,LOW表示只验证密码长
set global validate_password.policy=LOW;
#设置密码固定密码总长度
set global validate_password.length=4;
3.3 安装php
3.3.1 添加第三方yum源
安装epel源并添加第三方yum源
yum -y install epel-release && \
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
选择要安装的php版本
export phpversion=php73
yum -y install $phpversion-php-fpm $phpversion-php-cli $phpversion-php-bcmath $phpversion-php-gd $phpversion-php-json $phpversion-php-mbstring $phpversion-php-mcrypt $phpversion-php-mysqlnd $phpversion-php-opcache $phpversion-php-pdo $phpversion-php-pecl-crypto $phpversion-php-pecl-mcrypt $phpversion-php-pecl-geoip $phpversion-php-recode $phpversion-php-snmp $phpversion-php-soap $phpversion-php-xml
通过以下命令来获取更多安装信息
yum search php73
安装后的php配置文件路径
/etc/opt/remi/php73
3.3.2 修改php配置文件
编辑文件/etc/opt/remi/php73/php-fpm.d/www.conf
修改php运行用户和组为www
sed -i.bak '/^user/c user = www' /etc/opt/remi/php73/php-fpm.d/www.conf && \
sed -i '/^group/c group = www' /etc/opt/remi/php73/php-fpm.d/www.conf
3.3.3 启动php并设置开机自启
systemctl enable php73-php-fpm && systemctl start php73-php-fpm
4.基于lnmp平台搭建wordpress
4.1 nginx配置
编辑wordpress的nginx配置文件/etc/nginx.conf.d/blog.conf
server_name
下的index后边必须是 index.php
, 否则会报错403
cat > /etc/nginx/conf.d/blog.conf <<'EOF'
server {
listen 80;
server_name _;
root /website/wordpress;
index index.php index.html;
location ~ \.php$ {
root /website/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
wordpress https配置文件
server {
listen 80;
server_name blog.nginx.com;
rewrite (.*) https://$server_name$request_uri redirect;
}
server {
server_name _;
listen 443;
client_max_body_size 20m;
ssl on;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
root /website/wordpress;
index index.php index.html;
}
location ~ \.php$ {
root /website/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
文件fastcgi_params
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径
#以下为默认内容
fastcgi_param QUERY_STRING $query_string; #请求的参数;如?app=123
fastcgi_param REQUEST_METHOD $request_method; #请求的动作(GET,POST)
fastcgi_param CONTENT_TYPE $content_type; #请求头中的Content-Type字段
fastcgi_param CONTENT_LENGTH $content_length; #请求头中的Content-length字段。
fastcgi_param SCRIPT_NAME $fastcgi_script_name; #脚本名称
fastcgi_param REQUEST_URI $request_uri; #请求的地址不带参数
fastcgi_param DOCUMENT_URI document_uri; #与document_uri; #与uri相同。
fastcgi_param DOCUMENT_ROOT $document_root; #网站的根目录。在server配置中root指令中指定的值
fastcgi_param SERVER_PROTOCOL $server_protocol; #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
fastcgi_param GATEWAY_INTERFACE CGI/1.1;#cgi 版本
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;#nginx 版本号,可修改、隐藏
fastcgi_param REMOTE_ADDR $remote_addr; #客户端IP
fastcgi_param REMOTE_PORT $remote_port; #客户端端口
fastcgi_param SERVER_ADDR $server_addr; #服务器IP地址
fastcgi_param SERVER_PORT $server_port; #服务器端口
fastcgi_param SERVER_NAME $server_name; #服务器名,域名在server配置中指定的server_name
#fastcgi_param PATH_INFO $path_info;#可自定义变量
# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param REDIRECT_STATUS 200;
在php可打印出上面的服务环境变量
如:echo $_SERVER['REMOTE_ADDR']
创建网站根目录
mkdir /website
编辑php测试配置文件
cat > /etc/nginx/conf.d/test.conf <<'EOF'
server {
server_name _;
listen 88;
root /tmp;
index index.php index.html;
location ~ \.php$ {
root /tmp;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
创建info.php测试php是否正常解析
cat > /tmp/info.php <<EOF
<?php
phpinfo();
?>
EOF
注意端口是88
创建mysql.php测试php是否能连接mysql数据库服务
cat > /tmp/mysql.php <<'EOF'
<?php
$servername = "localhost";
$username = "wordpress";
$password = "wordpress";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connection successful";
?>
EOF
本机测试即可
$ curl 127.0.0.1:88/mysql.php
Connection successful
4.2 下载wordpress安装包并解压至nginx网站根目录
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
tar xf latest-zh_CN.tar.gz -C /website
cd /website && chown -R www.www wordpress/
4.3 创建数据库并授权
mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)
#mysql8不能直接创建用户授权,需要先创建用户,然后授权
mysql> create user wordpress@'localhost' identified by 'wordpress';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on wordpress.* to wordpress@'localhost';
Query OK, 0 rows affected (0.00 sec)
4.4 浏览器访问IP开始安装
第一步、浏览器访问IP开始安装
点击现在就开始
第二步、填写数据库信息
第三步、开始安装
第四步、配置站点标题、用户名密码、邮箱
第五步、完成安装
第六步、登陆wordpress
登陆后首界面
5.文件上传限制问题
修改php配置文件php.ini
upload_max_filesize = 20M
post_max_size = 20M
修改nginx配置文件
client_max_body_size 300M;
php.ini 配置对php上传文件大小的影响参数有:
配置项 | 值 | 功能 |
---|---|---|
file_uploads | ON | 确定服务器上的PHP脚本是否可以接受HTTP文件上传 |
memory_limit | 8M | 设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存 |
post_max_size | 8M | 限制通过POST方法可以接受的信息最大量 |
upload_max_filesize | 2M | 限制PHP处理上传文件最大值,此值必须小于post_max_size值 |
⚠️当 post_max_size
值小于 upload_max_filesize
的值,以 post_max_size
的值为准
而对应的 $_FILES
中error对应的错误提示有:
文件上传时产生的错误
0:表示 没有发生任何错误,文件上传成功
1:表示上传文件的大小超出了再PHP配置文件中 upload_max_filesize
选项限制的值
2:表示上传文件大小超出了HTML表单中 MAX_FILE_SIZE
选项所指定的值
3:表示文件只被部分上传
4:表示没有上传任何文件