lnmp平台

一、lnmp简介

LNMP就是Linux+Nginx+MySQL+PHP,Linux作为服务器的操作系统,Nginx作为Web服务器、PHP作为解析动态脚本语言、MySQL即为数据库。

  • Linux作为服务器的操作系统。

  • Nginx作为WebServer服务器。

  • PHP 作为动态解析服务(php)。

  • MySQL作为后端存储数据库服务。

二、fastcgi协议

Nginx服务本身不能处理PHP的请求,用户发起PHP动态请求, Nginx处理过程如下

用户-->http协议-->Nginx-->fastcgi协议-->php-fpm

fastcgi是nginx连接php-fpm之间的协议

nginx结合PHP FastCGI运行原理图

iShot2020-06-2022.31.46

1.用户发起的所有请求会先抵达LNMP架构中的Nginx

2.如果用户请求的是静态内容,则Nginx直接响应并处理

3.如果用户请求的是动态内容,则通过fastcgi协议发送至php-fpm管理进程

4.php-fpm接收到请求后,会派生对应的wrapper线程,来解析用户请求的动态内容

5.如果涉及到查询数据库操作,则需要php先连接数据库,然后进行查询操作(php-mysql)

6.最终由mysql-->php-fpm->fastcgi->nginx->client

三、搭建lnmp平台

3.1 安装nginx

nginx centos rpm包官方下载地址

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

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

四、基于lnmp平台搭建wordpress

wordpress中文官网

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

iShot2020-06-2119.02.06

创建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开始安装

点击现在就开始

iShot2020-06-2119.14.50

第二步、填写数据库信息

iShot2020-06-2119.16.16

第三步、开始安装

iShot2020-06-2119.16.43

第四步、配置站点标题、用户名密码、邮箱

iShot2020-06-2119.20.56

第五步、完成安装

iShot2020-06-2119.21.50

第六步、登陆wordpress

iShot2020-06-2119.22.39

登陆后首界面

iShot2020-06-2119.23.17

五、文件上传限制问题

修改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:表示没有上传任何文件

泡泡吐肥皂o © gitbook.pptfz.top 2021 all right reserved,powered by Gitbook文件修订时间: 秃笔南波湾!!!

results matching ""

    No results matching ""