一.LNMP环境的搭建
LNMP: L(Linux)、N(Nginx)、MySQL(MariaDB)、PHP\Python\Perl 用于搭建 Web 服务器环境的缩写
1.1 LNMP介绍
Linux(L):Linux操作系统核心组件
功能
提供服务器硬件和软件之间的接口
特点:高度可定制、稳定性高、支持多用户多任务、广泛的社区支持
Nginx(N): 高性能的Web服务器和反向代理服务器
功能
提供高并发、低内存消耗及高度可扩展的服务
可以处理静态资源,同时也可以代理动态请求到后端的应用服务器
LNMP中的作用
负责接收用户的请求,并将请求分发给后端的应用服务器,比如 PHP-FPM
特点:处理静态文件、索引文件和自动索引高效;低内存消耗;设置简单;支持反向代理、负载均衡和HTTP缓存
MySQL/MariaDB(M):关系型数据库管理系统
功能
存储和管理应用程序的数据
LNMP中作用
负责处理应用程序与数据库之间的数据交互
PHP/Python/Perl(P):表示一种服务器端脚本语言
LNMP中作用
与 Web 服务器(通常是 Nginx)集成,处理动态请求,生成并返回动态内容给用户
通常使用PHP-FPM(FastCGI Process Manager)来处理 PHP 脚本
1.2 工作流程
用户请求
通过web浏览器发起请求,通过互联网发到托管LNMP堆栈的服务器
Nginx处理请求
若为静态内容(图片、CSS文件、JavaScript文件等),直接从文件系统检索文件并返回给用户
若为动态内容请求(PHP、Python或Perl脚本),Nginx将请求转发给相应处理器(如PHP-FPM)
动态内容处理
通过PHP-FPM(FastCGI Process Manager)处理
PHP脚本可能从数据库检索或存储数据,数据库服务器响应对应请求返回结果给PHP处理器,PHP处理器处理完后生成HTML、JSON或其他格式的响应数据传回Nginx,Nginx收到后发回请求的客户端
用户接受响应
Web浏览器接收到Nginx服务器发送的数据,处理并显示给用户
1.3 LNMP环境搭建及wordpress下载
安装软件前先更新下系统包
sudo apt update
sudo apt upgrade -y
Linux
Ubuntu Server 22.04 LTS 64bi 系统
腾讯云服务器
Nginx安装
sudo apt install nginx -y
-y 安装过程中自动回复是
等安装完使用
nginx -v
查看版本若有则安装正常
启动并使Nginx服务在系统启动时自动运行
1sudo systemctl enable nginx //启用服务,在开机时自动启动
2sudo systemctl start nginx //立即启动服务
MySQL或MariaDB安装
MySQL
安装MySQL服务器
sudo apt install mysql-server -y
运行安全安装脚本设置MySQL
sudo mysql_secure_installation
设置root密码(保护root账户)
移除匿名用户(安装默认有一个匿名用户,允许任何人登录到MySQL而不需要用户名)
禁止root远程登录
移除测试数据库:默认会生成一个test数据库,任何人都可访问
重新加载权限表:使设置生效
检查MySQL服务是否运行
sudo systemctl status mysql.service
若没有运行,输入一下命令启动服务
sudo systemctl start mysql
MariaDB
安装MariaDB
apt install mariadb-server
运行安全安装脚本设置MySQL
sudo mysql_secure_installation
检查服务状态
sudo systemctl status mariadb
若没运行,输入一下命令启动服务
sudo systemctl start mariadb
设置MariaDB启动时运行
sudo systemctl enable mariadb
MySQL也可设置
PHP安装
sudo apt install php-fpm php-mysql php-xml php-xmlrpc php-gd php-curl php-mbstring -y
php-fpm(PHP FastCGI Process Manager):用于高性能网站,提供了一个健壯的、高效的方式来运行PHP代码
php-mysql:提供PHP通过MySQL或MariaDB数据库进行操作的能力
php-xml:提供操作XML文件的能力,对于需要解析、生成XML文件的应用是必需的
php-xmlrpc:使PHP支持XML-RPC,一种远程过程调用协议
php-gd:提供对图像处理的支持,例如创建缩略图、处理JPEG、PNG等格式的图片'
php-curl:提供PHP访问网络资源的能力,如通过HTTP、FTP等协议获取网页内容
应用需要访问外部API或网页,这个扩展是必需的
php-mbstring:提供多字节字符串处理的功能,对于处理非ASCII字符集(如UTF-8)是必需的
启动PHP-FPM服务
systemctl start phpX.X-fpm
systemctl enable phpX.X-fpm
X.X为安装的php版本
wordpress下载
将wordpress安装在/var/www/html
安装目录理论上可任意,只要之后web服务器配置正确指向该目录即可
到/var/www/html目录:
cd /var/www/html
下载wordpress最新中文版
`wget https://cn.wordpress.org/latest-zh_CN.zip
若要解压.zip 需要有unzip
unzip下载:
sudo apt install unzip
解压
unzip latest-zh_CN.zip
解压到当前目录,若要指定目录需加参数-d
如:
unzip latest-zh_CN.zip -d /var/www/html
*到此步,LNMP及wordpress相关软件都已安装完毕,之后对他们关于wordpress进行相关配置
1.4wordpress及LNMP相关配置
Nginx配置
找到Nginx默认配置文件,一般在/etc/nginx
打开配置文件:nginx.conf
sudo vim nginx.conf
默认内容如下:
其中 user www-data表示运行Nginx工作进程的默认用户
pid /run/nginx.pid
指定Nginx主进程的PID存储文件位置include…… 表示包含此目录下的所有以conf结尾的配置文件
event{...}
: event块用于指定与工作进程和连接处理相关的设置
worker_conections 768;
表示每个工作进程可以同时处理最对多768个网络连接multi_accept oh
:每个工作进程在被通知有新的连接请求时,将接受所有新的连接请求,而不是一次只接受一个
http{...}
:http块用于定义HTTP服务器的全局配置,包括文件传输、日志记录、压缩等设置
基本设置
sendfile on
:启用高效文件传输,直接在内核中传输文件,减少CPU负担tcp_nopush on
:将多个小的网络合并为大的网络包发送,减少网络传输开销types_hash_max_size 2048;
:设置最大的types
哈希表大小,这可以在有很多MIME类型时提高性能include /etc/nginx/mime.types;
:包含MIME类型的定义文件,告诉Nginx如何处理不同类型的文件default_type application/octet-stream;
:设置默认的MIME类型。如果请求的文件类型未在mime.types
文件中定义,则使用此默认类型
SSL设置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
:定义允许的SSL协议版本,这里推荐使用TLSv1.2和TLSv1.3,同时避免使用已被认为不安全的协议(如SSLv3)。
ssl_prefer_server_ciphers on;
:确保服务器优先选择加密套件,这样可以使用更安全的选项
日志设置
access_log /var/log/nginx/access.log;
:定义访问日志的存储位置。error_log /var/log/nginx/error.log;
:定义错误日志的存储位置
Gzip设置
gzip on;
:启用gzip压缩,减少传输数据的大小,提高加载速度。注释掉的部分提供了进一步的gzip配置选项,例如调整压缩级别、指定哪些类型的响应应该被压缩等
虚拟主机配置
include /etc/nginx/conf.d/*.conf;
:自动包含/etc/nginx/conf.d/
目录下的所有.conf
文件。这个目录通常用于存放具体站点的配置。include /etc/nginx/sites-enabled/*;
:包含/etc/nginx/sites-enabled/
目录下的配置文件,这是一个常见的做法,用于启用特定的网站配置(之后新增配置文件就在此处)
此配置文件为全局配置文件,不对其作修改,只是大概看下整体框架,其余.conf文件都是包含在其中,现在需要增加的配置文件就在
/etc/nginx/sites-enabled/
目录下的default总结:
Nginx的 nginx.conf配置文件结构
全局块:文件最开始,配置用户、工作进程数等
events块
http块
其中包含多个子块和指令:
server块:服务器块。定义一个或多个服务器,每个服务器可以监听一个端口并处理特定的域名请求。
location块:位置块,用于根据请求的URI匹配不同的处理规则
服务器块可以包含多个位置(location)块
upstream块:上游块。定义一组服务器,用于负载均衡
include:引入其他配置文件,常用于模块化管理虚拟主机配置
日志、压缩、缓存设置:配置访问日志(access_log)、错误日志(error_log)、启用gzip压缩(gzip)等
mail块:使用Nginx作为邮件代理服务器,这个块用于配置邮件服务相关的设置,如认证方式、SSL配置等
不常见,通常被注释掉
steam块:用于配置TCP/UDP流处理,如负载均衡、端口转发等(这也是一个高级功能,不是所有配置都会用到)
/etc/nginx/sites-enabled/下default的配置(需要做修改的配置文件)
配置思路:主要是监听80端口(http),并对此端口的请求处理做出规定
主要就是配置server块(包含于nginx.conf中的http块):
配置监听端口80对IPv4和IPv6的请求;
default_server 表面如果没有其他服务器模块匹配到请求,这个块将作为默认回应
设置网站文件根目录和首页
根目录:根据安装解压wordpress的位置配置:
root /var/www/html/wordpress;
首页:
index index.php;
:指定index.php
作为默认的主页文件
服务器名称和日志文件
服务器名称:
server_name xxx.xxx.xxx.xxx;
:意味着这个服务器块将接受xxx.xxx.xxx.xxx的请求,若已注册域名,则可将xxx.xxx.xxx.xxx替换为自己的域名,比如:我的博客域名:aisrtech.top 或www.asirtech.top;可并列添加多个域名,中间由空格隔开(如:`server_name aisrtech.top www.asirtech.top)
设置客户端请求体大小
client_max_body_size 128M;
:设置客户端请求的最大允许体积为128MB,这对于允许上传大文件至WordPress网站非常有用
处理普通请求的位置块
location / {
try_files $uri $uri/ =404;
}
:这个location
块试图将请求定向到对应的静态文件。如果没有找到文件或目录,则返回404错误
处理PHP文件的位置块:
location ~ \.php$ { ... }
:这个location
块用于处理所有以.php
结尾的请求。它通过fastcgi_pass
指令将请求转发到PHP的FastCGI进程管理器(FPM),这里是指向php8.1-fpm
的socket文件。fastcgi_intercept_errors on;
允许Nginx处理来自FastCGI服务器的错误。
具体配置文件如下:
xxxxxxxxxx
291server {
2listen 80 ; #default_server
3listen [::]:80 ; #default_server
4server_name xxx.com www.xxx.com;
5#return 301 https://$host$request_uri; #将http的域名请求转成https
6# include snippets/snakeoil.conf;
7#sxs:将网站根目录由 /var/www/html/ 改成/var/www/html/wordpress
8root /var/www/html/wordpress;
9# Add index.php to the list if you are using PHP
10#sxs:将默认主页改成index.php
11index index.php;
12#sxs:新增,指定日志文件
13access_log /var/log/nginx/xxx.com.access.log;
14error_log /var/log/nginx/xxx.com.error.log;
15#sxs:新增,设置客户端请求主题的最大尺寸为128M
16client_max_body_size 128M;
17location / {
18# First attempt to serve request as file, then
19# as directory, then fall back to displaying a 404.
20try_files $uri $uri/ =404;
21}
22#sxs:新增,这段代码作用是将.php结尾的请求发送到指定的PHP FastCGI服务器进行处理
23location ~ \.php$ {
24include snippets/fastcgi-php.conf;
25fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
26include fastcgi_params;
27fastcgi_intercept_errors on;
28}
29}
配置好后测试并重启服务:
nginx -t
systemctl reload nginx
数据库配置(MariaDB为例子)
登陆mysql:
sudo mysql -u root -ps
建立一个wordpress数据库
CREATE DATABASE wordpress;
执行MySQL语句记得最后加封号结束命令
建立用户,设定用户名及密码:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
将wordpress数据库的权限赋予username
GRANT ALL PRIVILEGES ON wordpress.* TO 'username'@'localhost';
刷新权限即可推出MySQL
FLUSH PRIVILEGES;
配置wordpress
在安装目录(/var/www/html/wordpress)下,安装完由名为wp-config-sample.php(模板,真正调用的是wp-config.php),将其做修改并改名为wp-config.php即可配置调用
修改其中的数据库的名称、用户名和密码即可:如下图
使用命令:
sudo vim /var/www/html/wordpress/wp-config-sample.php
保存后改名:
sudo mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
即可
修改wordpress目录权限
确保网络服务器能够访问,一般将wordpress所有文件所属用户和组改为www-data
sudo chown -R www-data:www-data /var/www/html/wordpress
PHP配置
修改php.ini(位于/etc/php/X.X/fpm/php.ini X.X为所安装php版本)可更改脚本相关配置:
可更改以下几项
xxxxxxxxxx
41max_execution_time = 60 ;控制 PHP 脚本的最大执行时间,默认30秒
2memory_limit = 512M ;设置 PHP 脚本可以使用的最大内存量,默认128M,可以根据网页内容以及机器内存设置
3post_max_size = 128M ;控制 PHP 能够接收的最大 POST 数据大小,默认8M有点小
4upload_max_filesize = 256M ;控制 PHP 能够接收的最大上传文件大小,默认只有2M大点图片都传不上来
到此LNMP及wordpress便全部配置完毕
1.5在客户端访问IP地址并安装wordpress
本地浏览器输入对应域名或IP地址即可进入wordpress安装界面,安装好后基本网站就搭建好了
注意开放云服务器的80(HTTP)端口,否则不能访问
填写基本信息安装即可
安装完毕后既可进去wordpress后台