AWS 亚马逊云 Red Hat 9 WEB服务器搭建 配置LNMP环境教程

亚马逊云 申请之后,需要创建EC2的服务器实例,WEB服务器搭建

。在亚马逊云平台申请好服务器后,还需要对 亚马逊云 服务器配置后才能投入使用,的虚拟机实例,下面以 为例,进行 WEB服务器搭建 。 Red Hat 红帽Red Hat Enterprise Linux 9 在AWS亚马逊云中是支持免费套餐的,亚马逊云 配置Red Hat 9无需额外付费。

AWS 亚马逊云 Red Hat 9 WEB服务器搭建 LNMP-1

AWS 亚马逊云 Linux Red Hat 9 系统初始配置

Red Hat Enterprise Linux 9 虚拟机实例启用之后,还是一个空白的系统,所有的环境都需要配置。

下面是 2023年1月30日 对 亚马逊云 Linux Red Hat 9 系统初始配置教程。

修改服务器root密码以及远程登录

云服务器创建完毕后,默认是使用 ec2-user 账号登陆的,对很多文件夹是没有权限的。需要更改为 root 超级管理员登录。

注意:在创建 Linux Red Hat 9 操作系统时,需要先创建一个密钥对进行SSH远程控制,创建时“私钥文件格式”系统默认的是“.PPK”,使用PuTTY进行SSH连接的,这里不要更改,如果选择常用的“.pem”格式,将无法SSH连接服务器。

AWS 亚马逊云 Red Hat 9 WEB服务器搭建 LNMP-1参考阅读:如何使用root账号SSH登录aws亚马逊云

安装启用 DNF 命令的自动更新

安装 dnf-automatic

dnf install dnf-automatic

设置dnf-automatic为开机启动。

systemctl start dnf-automatic.timer

如果你没有开通Red Hat 订阅权限,这一步无法更新dnf仓库。

安装开发工具软件包组

开发工具软件包组里面,包含了大部分Linux下的常用命令,以及工具软件。

dnf group install 'Development Tools' -y

DNF更新系统软件包

将系统里的软件包更新到dnf上最新版本。

dnf -y update

配置系统虚拟内存

默认安装操作系统是没有分配swap空间的,需要手动添加。如果操作系统没有配置swapfile(分配swap空间)会导致内存负载后出错。

使用 free -m 命令查看内存配置,如果Swap后面都是0的话则需要添加swap空间。

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

Swap后面全是0,下面开始创建Swap虚拟内存!

创建一个预分配指定大小空间的文件,下面设置大约8G左右的硬盘空间作为系统虚拟内存使用。

sudo dd if=/dev/zero of=/swapfile bs=1024 count=8388608

划为Swap空间时,服务器会有一些慢,请耐心等待。

划分完毕后,使用ls命令检查文件大小。

ls -lh /swapfile

大小查看过后,需要更改swap文件的权限。

sudo chmod 600 /swapfile

操作之后,格式化swapfile。

sudo mkswap /swapfile

好了,现在swapfile文件已经创建完成了,下面启用swapfile文件。

sudo swapon /swapfile

最后,修改fstab文件来实现重启后 swap 可以自动生效。

sudo vi /etc/fstab

使用VI 编辑 /etc/fstab ,在文件末尾加入下面内容。

/swapfile swap swap sw 0 0

或者使用echo命令添加。

echo '/swapfile swap swap sw 0 0' | sudo tee -a /etc/fstab

设置完毕后,reboot重新启动服务器。

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

如果你想停止swap,你可以使用 swapoff /swapfile ,删除swap文件的命令是 rm -ir /swapfile

修改服务器时区

将服务器时区修改为Asia/Shanghai,之后可以使用 timedatectl 命令查询时区。

sudo timedatectl set-timezone Asia/Shanghai

禁用SELinux

永久禁用SELinux,将SELinux属性修改为 Disabled 后重新启动服务器。

vi /etc/selinux/config

AWS 安装 Red Hat 中文语言包

在Red Hat上安装中文语言包,使用dnf命令,搜索中文语言包。

dnf search langpacks

我们可以发现Red Hat上的简体中文的安装包是:langpacks-zh_CN.noarch

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

直接通过dnf命令安装:

dnf install langpacks-zh_CN.noarch

按Y同意安装,之后会自动下载安装包进行安装。

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP中文字体安装完毕后,修改系统语言:

vi /etc/locale.conf

将原来的内容替换成下面内容
LANG="zh_CN.UTF-8"
最后通过命令:locale -a 命令查看一下 zh_CN 有没有安装成功,之后,reboot 命令重新启动服务器。

在 Red Hat 9 上安装 RPM 存储库

Remi 的 RPM 存储库。运行以下命令以启用和Remi存储库:

启用 Remi 存储库

sudo dnf install epel-release yum-utils
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

 

启用 EPEL 存储库

EPEL 9 已正式向公众发布。EPEL 存储库的安装非常简单,只需运行以下命令即可完成。

sudo dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

设置安全组防火墙

开启防火墙:service iptables start

关闭防火墙:service iptables stop

默认防火墙:chkconfig iptables off

RedHat9的默认防火墙是关闭状态,在服务器上无需设置,接下来要在AWS云平台上设置一个透明防火墙。当然你也可以单独开放你需要的端口。透明防火墙只是为了方便测试。

在AWS云平台的安全组选项中,点击访问你配置EC2服务器的对应安全组。

AWS 亚马逊云 Red Hat 9 WEB服务器搭建 配置LNMP环境教程-1

我们可以看到,默认开放的端口只有22、80、443,透明防火墙就是开放全部入站端口。

点击右上角的编辑入站规则,之后再编辑入站规则中点击添加规则,将类型选择为所有流量,源信息选择任何位置ipv4,然后在后面IP地址输入0.0.0.0/0

AWS 亚马逊云 Red Hat 9 WEB服务器搭建 配置LNMP环境教程-1

点击保存规则后,防火墙已经设置为透明防火墙,打开服务器的全部端口。

如何在 RHEL 9 注册 Red Hat订阅

安装上面的Remi和EPEL的RPM存储库后,可以忽略官方的存储库,此处可以选择注册与不注册。

如果你在RHEL 9 安装期间尚未注册系统,则可以通过以root用户身份,应用以下命令来立即执行此操作。

如果你没有Red Hat的用户,请先到Red Hat 官方网站注册https://www.redhat.com/wapps/ugc/register.html

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

用户注册请填写真实邮箱,注册后电子邮件中会有一封验证邮件的连接,激活后帐户才会生效。Red Hat用户注册成功后,返回Xshell中,进行登录。

subscription-manager register

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

亚马逊云 配置LNMP环境

安装LNMP(Nginx/MySQL/PHP)

采用Linux、PHP、MySQL的优点我们不必多说。

Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,已经在一些俄罗斯的大型网站上运行多年,目前很多国内外的门户网站、行业网站也都在是使用Nginx,相当的稳定。

Nginx相当的稳定、功能丰富、安装配置简单、低系统资源

如果你懒得手动安装,你可以选择使用LNMP一键安装包,以下内容仅供学习参考。

AWS 安装PHP

PHP是配置云服务器时必不可少的,大部分的网站都是PHP语言编写的,如果不安装PHP,服务器将无法对网站进行PHP解析。

在remi软件存储库中,php最低版本是7.4,最高版本8.2。在Red Hat官方源中,仅提供PHP8.1的稳定版本。如果想安装低版本的PHP,可以切换到Remi源中进行安装。

首先检查一下系统中 from RHUI (RPMs) 的元数据。

dnf module list php

AWS 亚马逊云 Red Hat 9 WEB服务器搭建 LNMP-1启用仓库中的php模块:

dnf module enable php:remi-7.4

输入Y之后,php7.4的模块流就被启用了。

AWS 亚马逊云 Red Hat 9 WEB服务器搭建 LNMP-1AWS 亚马逊云 Red Hat 9 WEB服务器搭建 LNMP-1如果想重置php模块流,可以使用下面的命令:

dnf module reset php

接下来就可以直接安装php了,下面开始安装PHP7.4和相关依赖。

dnf install php php-mysqlnd php-gd

输入Y之后,开始安装php7.4以及相关依赖软件包。

php -v

查看一下php安装是否正确。

AWS 亚马逊云 Red Hat 9 WEB服务器搭建 LNMP-1

缺少mb_strlen函数,如何安装mbstring(mb_strlen )

php7.2版本中默认没有安装mb_strlen函数,需要使用dnf进行安装。首先搜索一下 php-mbstring

dnf search php-mbstring

搜索后进行安装。

dnf install php-mbstring.x86_64

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

PHP安装zip扩展

有些web程序需要php的ZIP扩展。需要安装 php-pecl-zip

dnf install php-pecl-zip

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

扩展安装完毕之后重新启动php服务

systemctl restart php-fpm

配置PHP

php7.4安装完毕后,还需要进行一些常规的配置。

修改php访问权限,php默认的访问用户是阿帕奇的用户,我们需要将apache更改成nginx,因为我们需要使用nginx作为web服务端。

vi /etc/php-fpm.d/www.conf

user = nginx
group = nginx

user和group都要改成nginx。修改完毕之后按esc键,:wq 保存退出文件。

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

如果你在安装 WordPress 时无法创建目录,要确保wp文件存放目录的用户组,nginx 的用户组还有PHP的用户组必须在同一用户下才可以。

修改web文件存放目录的用户访问权限。

chown -R nginx:nginx /var/www

修改PHP的主程序配置文件:

vi /etc/php.ini

cgi.fix_pathinfo 为 CGI 提供 *real* PATH_INFO/PATH_TRANSLATED 支持。 PHP的以前的行为是将 PATH_TRANSLATED 设置为 SCRIPT_FILENAME,而不是 grok PATH_INFO 是什么。有关 PATH_INFO 的更多信息,请参阅 cgi 规范。环境 this 为 1 将导致 PHP CGI 修复其路径以符合规范。一个设置为零会导致 PHP 的行为与以前一样。默认值为 1。你应该修复你的脚本使用 SCRIPT_FILENAME 而不是 PATH_TRANSLATED。http://php.net/cgi.fix-pathinfo

cgi.fix_pathinfo = 1 修改为0

上传文件的最大允许大小。
http://php.net/upload-max-filesize

upload_max_filesize = 2M 文件上传大小,默认值太小,建议修改为1024M

此指令控制PHP是否输出错误,笔记和警告也是如此。错误输出在开发过程中非常有用,但是在生产环境中可能非常危险。取决于代码这是触发错误,敏感信息可能会泄漏超出您的应用程序,如数据库用户名和密码或更糟糕的。
对于生产环境,我们建议记录错误而不是将它们发送到stdout。
可能的值:
off =不显示任何错误
stderr = 向 STDERR 显示错误(仅影响 CGI/CLI 二进制文件!)
On 或 stdout = 向 STDOUT 显示错误
默认值:开
发展价值:上
生产价值:关闭
http://php.net/display-errors

display_errors = Off 打印错误,修改为On

PHP 将接受的 POST 数据的最大大小。
它的值可能为 0 以禁用限制。如果 POST 数据读取将被忽略通过 enable_post_data_reading 禁用。
http://php.net/post-max-size

post_max_size = 8M 表单最大值,建议修改为32M

每个脚本的最大执行时间,以秒为单位
http://php.net/max-execution-time
注意:对于 CLI SAPI,此指令硬编码为 0

max_execution_time=30 php脚本最大执行时间,修改为300或更高

修改 session 权限:

例如修改 /var/lib/php/session 的用户组以及权限。

cd /var/lib/php
chown nginx:nginx ./session
chmod -R 777 ./session

PHP已经配置完成了,最后一步,设置开机启动和运行服务。

systemctl enable php-fpm

systemctl start php-fpm

常用操作命令:

重启PHP:
systemctl restart php-fpm

启动PHP:
systemctl start php-fpm

关闭PHP:
systemctl stop php-fpm

PHP状态:
systemctl status php-fpm

PHP版本降级与升级

有些 web 网站程序缺少维护,兼容性差,仅仅支持低版本的 PHP,对于这样的web需求并满足相互兼容,需要将 PHP 版本向下降级。例如有些使用 SG11 进行加密的PHP程序。

SG11 是 SourceGuardian 11的简称,目前 SourceGuardian官方版本已经更新到 SourceGuardian 13 ,最关键的是两个版本的文件并不通用,而 SG11 对PHP加密最高版本是PHP 7.3,所以需要安装 SG11 的web程序时,PHP的版本不能高于7.3 。

注意:如果你想安装更低版本的PHP,例如PHP7.3的话,你首先需要将你的软件源同时降级。将remi-release-9.rpm降级为remi-release-8.rpm,因为在remi-release-9.rpm中没有PHP7.4以下的版本。

Remi存储库降级

sudo dnf install epel-release yum-utils
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

首先需要停止 PHP-FPM 及 Nginx 服务。

systemctl stop php-fpm

systemctl stop nginx

服务停止之后,将/etc/php.ini文件下载保存到本地,不然降级之后还需要重新修改php.ini文件。

如果你没有安装 yum-utils,需要安装 yum-utils 。

yum-utils 是一个与 yum 集成的实用程序集合,可以通过多种方式扩展 yum 的自带功能,从而使 yum 更强大、更易于使用。

dnf install yum-utils -y

卸载删除服务器上安装的PHP

dnf remove php\*

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

安装PHP7.3

查看PHP的仓库中存在的PHP模块

dnf module list php

因为之前模块流启用的是php7.4,如果想安装 php7.3 需要重置PHP模块

dnf module reset php

启用php7.3模块流。

dnf module enable php:7.3

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

PHP7.3 模块流启用之后,下面进行安装 PHP7.3

dnf install php php-mysqlnd php-gd

之后使用 php -v 名称查看一下php版本。已经变成php7.3了。

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

php7.3安装完毕后,将之前备份的php.ini文件覆盖到/etc/php.ini,之后修改 /etc/php-fpm.d/www.conf 文件内的用户与用户组的名称为nginx。

vi /etc/php-fpm.d/www.conf

user = nginx
group = nginx

上面操作全部完毕后,最后启动php与nginx服务。

systemctl start php-fpm

systemctl start nginx

安装PHP7.2

PHP 7.x软件包可在几个不同的存储库中使用。我们将使用 Remi存储库,其中提供了包括PHP在内的各种软件包的较新版本。

检查系统中启用软件仓库

sudo yum repolist

之后检查一下仓库中的php模块。

dnf module list php

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

安装remi-7.2,需要重置php模块。

dnf module reset php

重置模块后,选择remi-7.2的模块流。

dnf module enable php:remi-7.2

下面开始安装php remi-7.2

dnf install php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysqlnd

AWS 安装nginx

执行下面命令,获取可用的nginx模块流的列表。

dnf module list nginx

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

系统默认的是nginx的1.14版本,如果想安装更高的版本,需要重置一下nginx模块。

dnf module reset nginx

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

重置模块之后,我们就可以选择想安装的版本了,例如想安装1.20版本。你只需要启用1.20版本的模块流就可以了。

dnf module enable nginx:1.20

模块流启用只有,使用 dnf install 命令来安装nginx1.20版。

dnf install nginx -y

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

设置一下nginx的开启启动,nginx服务运行。

systemctl enable nginx

systemctl start nginx

安装完毕后,使用 netstat 查看一下当前端口占用情况

netstat -lntup

如果提示未找到命令,“-bash: netstat: 未找到命令”还需要安装一下网络组件工具 net-tools

dnf install net-tools -y

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

通过端口查看,我们可以看到,80端口已经北nginx占用,nginx服务安装成功。

常用命令:
重启:

systemctl restart nginx

启动:

systemctl start nginx

关闭:

systemctl stop nginx

状态:

systemctl status nginx

配置Nginx

编辑Nginx配置文件nginx.conf,如果想让web网站正常访问,需要编辑修改 Nginx 的配置文件 nginx.conf,nginx.conf 是 Nginx 的核心配置文件。使用 VI 命令编辑 /etc/nginx/nginx.conf。

vi /etc/nginx/nginx.conf

#配置用户或者组
user nginx;
#允许生成的进程数,默认为1
worker_processes auto;
#制定错误日志路径,级别。这个设置可以放入全局块,http块,server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg,级别越高,记录越少,一般设置error
error_log /var/log/nginx/error.log error;
#指定nginx进程运行文件存放地址
pid /var/run/nginx.pid;

#加载动态模块
include /usr/share/nginx/modules/*.conf;

#工作模式及连接数上限-events全局设置
events {
#单个work进程允许的最大连接数,默认为512
worker_connections 1024;
}

#http服务器配置文件块
http {
#文件扩展名与文件类型映射表。设定mime类型(邮件支持类型),类型由mime.types文件定义。
include /etc/nginx/mime.types;
#默认文件类型,默认为text/plain
default_type application/octet-stream;
#自定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#设置访问日志路径和格式。combined为日志格式的默认值。
access_log /var/log/nginx/access.log main;
#允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile on;
#tcp_nopush on;
#连接超时时间,默认为75s,可以在http,server,location块。
keepalive_timeout 65;
#gzip压缩开关,on开启Gzip压缩,默认 off 关闭
gzip on;
#启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 10k;
#gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 6;
#设置压缩所需要的缓冲区大小
gzip_buffers 32 4k;
# 设置gzip压缩针对的HTTP协议版本,没做负载的可以不用
gzip_http_version 1.1;
#进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
#是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
#从 /etc/nginx/conf.d 目录加载模块化配置文件。
include /etc/nginx/conf.d/*.conf;

}

上面是Nginx比较简单的基本配置,Server网站配置存放在 /etc/nginx/conf.d/ 目录下。

下面编辑Server网站配置,用于生产环境的Server网站配置。

#域名端口301重定向https

server {
server_name www.uzvod.com; # 网站的域名,可以是多个,用空格分开
return 301 http://uzvod.com$request_uri;
}

#前期配置nginx暂时还没有ssl证书,301重定向到根域名。

#网站配置核心块

server {
server_name uzvod.com;
root /var/www/uzvod;
index index.php index.html index.htm;

location ~* ^/(upload|vendor|thinkphp|extend|addons|application)/.*\.(php|php5)$
{
deny all;
}

include /etc/nginx/default.d/*.conf; # 从 /etc/nginx/default.d 加载默认服务器块的配置文件。

#伪静态页
location / {
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
rewrite ^/api.php(.*)$ /api.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}

}

添加好配置后,重新启动nginx服务

systemctl restart nginx

新建一个测试页面 index.php,将下面内容复制在文件中,这是一个PHP探针文件。

<?php
phpinfo();
?>

重新给目录配置权限

chown -R nginx:nginx /var/www

访问域名后,网站可以成功打开了,记下来需要在线申请ssl域名证书。然后在nginx中配置域名证书。

通过下面的证书机器人,已经成功申请了ssl域名证书,下面修改Nginx中Server的配置文件。

#域名端口301重定向https

server {
listen 80;
listen [::]:80;
server_name www.uzvod.com uzvod.com; # 网站的域名,可以是多个,用空格分开
return 301 https://uzvod.com$request_uri;

ssl_certificate /etc/letsencrypt/live/uzvod.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/uzvod.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

#网站配置核心块

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name uzvod.com;
root /var/www/uzvod;
index index.php index.html index.htm;

http2_push_preload on; # Enable HTTP/2 Server Push

ssl_certificate /etc/letsencrypt/live/uzvod.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/uzvod.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

# Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
# Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
# prevent replay attacks.
#
# @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
ssl_early_data on;
ssl_session_cache shared:SSL:50m;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=31536000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

include /etc/nginx/default.d/*.conf; # 从 /etc/nginx/default.d 加载默认服务器块的配置文件。

location ~* ^/(upload|vendor|thinkphp|extend|addons|application)/.*\.(php|php5)$
{
deny all;
}

#伪静态页
location / {
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
rewrite ^/api.php(.*)$ /api.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}

#反向代理

location /chat886 {
proxy_redirect off;
proxy_pass http://127.0.0.1:12345;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;

# Config for 0-RTT in TLSv1.3
proxy_set_header Early-Data $ssl_early_data;
}

}

添加好配置后,重新启动nginx服务

systemctl restart nginx

注意:Nginx配置成功之后,再使用下面的Certbot生成ssl域名证书,在Nginx中先不配置SSL访问规则。

Nginx通过 Certbot 生成SSL域名证书

Certbot 是一个免费的开源软件工具,用于在手动管理的网站上自动使用Let's Encrypt证书以启用 HTTPS。
Certbot 由电子前沿基金会 (EFF) 开发,这是一家位于加利福尼亚州旧金山的 501(c)3 非营利组织,旨在捍卫数字隐私、言论自由和创新。

Nginx配置好后,可以通过ssl域名证书机器人Certbot生长城ssl域名证书。具体安装方法请查看:

参考阅读:免费SSL证书机器人:Certbot快速申请自动续订https域名证书

AWS 安装MySQL

获取mysql的模块

dnf module list mysql

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

MySQL8.0是服务器上唯一的版本,下面进行安装MySQL8.0

dnf install @mysql

使用dnf install mysql和dnf install @mysql安装是不同的,@mysql安装软件包会更多一些。

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

安装完毕后设置MySQL开机启动

systemctl enable --now mysqld

之后检查一下MySQL运行是否正常。

systemctl status mysqld

绿灯正常,红灯故障,MySQL运行正常。

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

添加密码及安全设置

运行 mysql_secure_installation 脚本,该脚本执行一些与安全性相关的操作并设置MySQL根密码。

sudo mysql_secure_installation

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

脚本运行后,会询问你是否配置VALIDATE PASSWORD component(验证密码组件),这一步选择Y。

选择密码验证策略等级,选择0 (low)。
设置MySQL密码,这里输入需要设置的密码两次。
确认是否继续使用提供的密码?输入Y。
移除匿名用户? 输入Y。
允许root远程登陆? 输入N 。
移除test数据库? 输入Y。
重新载入权限表? 输入Y。

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

配置Mysql远程登陆,如果需要设置root账户远程登陆,重复上面步骤,在允许root远程登陆这一步设为Y。如果暂时不需要配置Mysql远程登陆,此段话可以忽略。

MySQL 在初始化完成之后,需要登录 MySQL进行验证
使用下面命令登录,并输入密码:

mysql -u root -p

登录没有异常,并可以显示mysql>操作台的话,配置安装已经成功了。

AWS 亚马逊云 Red Hat9 WEB服务器配置 LNMP

你可以在MySQL操作台上新建用户,也可以使用MySQL管理工具来新建用户或者数据库。

MySQL操作台新建用户的方法

创建新用户,用以远程登录
UserName 处填写你的用户名,Host 处填写 IP ,如 8.8.8.8 ,表示该用户只能在 8.8.8.8 这个 IP 上登录,若不限制IP登录,Host处填 % ,Password 处填写你的密码。

create user 'UserName'@'Host' identified by 'Password';

给新创建的用户授予权限,这里的 UserName 和 Host 都和上一步创建的用户一样。

grant all privileges on *.* to 'UserName'@'Host' with grant option;

测试远程登录是否可用就好,以防万一,下面更改密码的MySQL语句:

alter user 'root'@'localhost' identified by 'Password';

到此为止 MySQL 已经安装完成,如果对配置文件有额外需求的话,请更改 /etc/my.cnf 中的配置文件。

上面设置都完成之后,重新启动MySQL服务。

systemctl restart mysqld

MySQL 常用命令

启动 MySQL

systemctl start mysqld

重启MySQL

systemctl restart mysqld

停止 MySQL

systemctl stop mysqld

查看 MySQL 状态

systemctl status mysqld

AWS 安装 phpMyAdmin

phpMyAdmin 是一个用PHP编写的免费软件工具,旨在 通过 Web处理MySQL的管理。phpMyAdmin 支持对 MySQL 和 MariaDB 的广泛操作。常用操作(管理数据库、表、列、关系、索引、用户、权限等)可以通过用户界面执行,同时您仍然可以直接执行任何 SQL 语句。

phpMyAdmin是MySQL的管理工具,phpMyAdmin网站:https://www.phpmyadmin.net/

安装wget下载命令。

dnf install wget

下载最新版本的phpMyAdmin-5.1.3,注意下载tar.gz格式的压缩包。

wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.tar.gz

解压缩phpMyAdmin-5.1.3文件。

tar -zxvf phpMyAdmin-5.2.0-all-languages.tar.gz

将文件夹改名,这个名字你可以随后定义。这里默认更改成phpMyAdmin。

mv phpMyAdmin-5.2.0-all-languages phpMyAdmin

将文件移动到web存放目录。

mv phpMyAdmin /home/www

注意,如果你之前没有安装php-mysqlnd扩展,还需要安装php-mysqlnd扩展。

dnf install php-mysqlnd

配置phpMyAdmin

进入到phpMyAdmin目录下的libraries目录内,VI编辑config.default.php文件

cd /var/www/phpMyAdmin/libraries

vi config.default.php

将host后面的localhost修改为127.0.0.1,注意,不要使用小键盘输入数字。

$cfg[‘Servers'][$i][‘host'] = ‘localhost';改成$cfg[‘Servers'][$i][‘host'] = ‘127.0.0.1';
$cfg[‘Servers'][$i][‘user'] = ‘root';
$cfg[‘Servers'][$i][‘password'] = ‘mysql密码';
$cfg[‘blowfish_secret'] = ”; 改成 $cfg[‘blowfish_secret'] = ‘123456*******';

注意:其中的'123456*******′为随意的大于32个字符的密码。
修改之后保存退出,:qw
返回到

phpMyAdmin主目录下,将配置文件 config.sample.inc.php 改名。

cd /var/www/phpMyAdmin/

mv config.sample.inc.php config.inc.php

VI编辑配置文件config.inc.php。

vi config.inc.php

修改phpMyAdmin用于cookies的短密码。
$cfg[‘blowfish_secret'] = ”; 改成 $cfg[‘blowfish_secret'] = ‘123456*******';

注意:其中的'123456*******′为任意大于32位的密码字符。
这个密码用于Cookies的加密,以免多个PhpMyAdmin或者和其他程序共用Cookies时搞混。

短密码修完完毕后,修改host选项,将 $cfg[‘Servers'][$i][‘host'] = ‘localhost'; 改成 $cfg[‘Servers'][$i][‘host'] = ‘127.0.0.1';

修改session路径(例如/var/lib/php/session)的用户组以及权限,然后去到相应session路径。

cd /var/lib/php

chown nginx:nginx ./session

chmod -R 777 ./session

在phpmyadmin目录下新建tmp文件夹,权限设置777

mkdir /var/www/phpMyAdmin/tmp

chmod -R 777 /var/www/phpMyAdmin/tmp

最后修改一下phpMyAdmin文件存放目录的用户访问权限。

chown -R nginx:nginx /var/www

解决phpMyAdmin中高级功能尚未完全设置,部分功能未激活的问题。
在phpMyAdmin里点击创建一个phpmyadmin的空数据库就可以解决了。最后在Nginx中配置phpMyAdmin的访问路径后就可以正常访问了。

mysqli::real_connect(): (HY000/1045): for user ‘root'@'localhost' (using password: YES)

MySQL密码输入错误

亚马逊云安装 WordPress

首先下载最新版本的WordPress。

wget https://cn.wordpress.org/latest-zh_CN.tar.gz

下载完毕后解压缩文件。
tar -xzvf latest-zh_CN.tar.gz

移动文件夹到网站目录下
mv wordpress /var/www

cd /var/wwwroot

将wp-config-sample.php文件改名
cp wp-config-sample.php wp-config.php

修改网站配置文件:
vi wp-config.php

WordPress数据库的名称:define( ‘DB_NAME', ‘WordPress' );
MySQL数据库用户名:define( ‘DB_USER', ‘root' );
MySQL数据库密码:define( ‘DB_PASSWORD', ‘mysql密码' );
MySQL主机:define( ‘DB_HOST', ‘127.0.0.1' );
创建数据表时默认的文字编码:define( ‘DB_CHARSET', ‘utf8' );
在文件末尾添加以下代码:
if(is_admin()) {add_filter('filesystem_method', create_function('$a', 'return "direct";' ));define( 'FS_CHMOD_DIR', 0751 );}

修改好配置文件后,重新加用户权限!

chown -R nginx:nginx /var/www

在nginx的配置文件中,加入下面代码,用于伪静态的插件安装:

server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
server_name www.uzbox.tk; # 你的域名
return 301 https://uzbox.tk$request_uri; # 将www域名301重定向到uzbox.tk
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name uzbox.tk;
root /home/wwwroot;

ssl_certificate "/home/ssl/fullchain.cer";
ssl_certificate_key "/home/ssl/uzbox.tk.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;

# Config for 0-RTT in TLSv1.3
ssl_early_data on;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000";
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args; #用来支持wordpress中伪静态的设置。
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

添加好配置后,重新启动nginx服务

systemctl restart nginx

最后在MySQL中创建一个的wordpress的数据库。

例如:WordPress数据库的名称:define( ‘DB_NAME', ‘WordPress123‘ );

你需要在MySQL中使用命令或者phpmyadmin中创建一个名字为WordPress123的数据库,否在打开站点会提示数据库连接出错。

配置好数据库,登录wordpress页面,输入你的站点名称,用户帐号密码等相关内容后,站点创建成功,登录到站点后台后,首先要修改WordPress的固定链接,进入后台,打开设置固定链接。
自定义结构后面填入%category%/%post_id%
安装“No Category Base”插件用来去掉分类目录/category/

剩余详细配置请参考优质盒子站内的内容。

评分

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注