使用EC2 + RDS + Nginx + PHP8 + Adminer搭建WordPress
首先
由于nginx和php-fpm的配置相互影响,所以我在某些方面感到困难,因此我将其记录下来。
前提条件

– 溪水流动
– 水流
– 水的动向
– 过去的事情
– 事物的变化
– 自然的进程
-
- EC2的初始设置
-
- 在EC2上安装PHP和nginx
-
- 修改nginx.conf配置文件
-
- 修改php-fpm配置
-
- 安装DB管理工具adminer
-
- 修复WordPress管理界面的重大问题
- 实施SSL加密
EC2的初始设置
EC2端口的变更
在启动EC2时,出于安全考虑,可以选择更改ssh端口。
$ sudo vim /etc/ssh/sshd_config
Port 49923
请确保应用了设置。不要忘记更改安全组。
安全组类型应为自定义 TCP,而非 SSH。
$ sudo service sshd reload
设置日本时间
请参考下面的文章。
安装PHP和nginx到EC2服务器上。
使用amazon-linux-extras命令,可以确认可安装的PHP和nginx版本。
$ sudo yum -y update
$ amazon-linux-extras
15 php7.2 available
31 php7.3 available
38 nginx1 available
42 php7.4 available
51 php8.0 available
安装 nginx1 和 php8.0 ,并确认版本。
$ sudo amazon-linux-extras install -y nginx1
$ sudo amazon-linux-extras install -y php8.0
$ nginx -v
nginx version: nginx/1.20.0
$ php -v
PHP 8.0.8 (cli) (built: Jul 7 2021 17:35:32)
$ php-fpm -v
PHP 8.0.8 (fpm-fcgi) (built: Jul 7 2021 17:37:26)
启动并设定nginx和PHP-FPM自动启动。
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl start php-fpm
$ sudo systemctl enable php-fpm
更改nginx.conf的配置
在/etc/nginx/目录下,经常会有一个nginx.conf文件。
$ sudo vim /etc/nginx/nginx.conf
nginx.conf的初始设置位于/etc/nginx/目录下。
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
我将在服务器上进行更改。
更改的地方包括root、server_name、try_files和error_page 404。
server {
listen 80;
listen [::]:80;
# ドメインがある場合は、_の箇所に記載する
server_name _;
root /usr/share/nginx/html/test;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
error_page 404 = @notfound;
location @notfound {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param QUERY_STRING error=404;
fastcgi_pass php-fpm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
错误页面 404
关于404错误页面,我在wp-content/theme/主题目录/下发现了404.php文件,但如果不进行上述设置,它将无法生效。
尝试文件
如果没有try_files指令,参数将无法传递给Laravel,只能显示Laravel的首页,而无法显示其他页面,请注意。
try_files指令用于处理所有的访问请求。从左侧开始,在文档根目录下查找,并按以下三个步骤处理。
-
- $url路径下是否存在文件?
如果$url以斜杠结尾(即为一个目录),是否存在该目录?如果存在,则引用其中的index。
如果上述两种情况都不存在,将重定向到/index.php?$query_string。(即为index.php文件)
作为参考,Laravel官方文档中也提供了Nginx配置文件的示例。
特别是,没有其他的更改。
一些文章中常常在nginx.conf中进行以下陈述,但这次不做也没有问题。
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}
由于nginx.conf文件中有以下的配置,这就是原因。
http {
include /etc/nginx/conf.d/*.conf;
server {
include /etc/nginx/default.d/*.conf;
我们来看一下 nginx.conf 文件,可以知道它加载了 /etc/nginx/conf.d/*.conf 和 /etc/nginx/default.d/*.conf 两个文件。
只需要一个选项,将以下内容用中文归纳:
“/etc/nginx/conf.d/*.conf”
$ ls /etc/nginx/conf.d/
php-fpm.conf
由于本次的目标是查看php-fpm.conf的读取情况,让我们来看一下。
# PHP-FPM FastCGI server
# network or unix domain socket configuration
upstream php-fpm {
server unix:/run/php-fpm/www.sock;
}
由于已加载 unix:/run/php-fpm/www.sock,因此需要确认 nginx.conf 和 php-fpm 是否具有相同的配置。
www.sock 在 php-fpm 重新启动时会生成。
请确保查看 /etc/nginx/default.d/*.conf 文件。
/nginx文件夹下的default.d文件夹内的所有.conf文件
$ ls /etc/nginx/default.d
php.conf
因为这次是要加载php.conf文件,所以让我们来看一下吧。
# pass the PHP scripts to FastCGI server
#
# See conf.d/php-fpm.conf for socket configuration
#
index index.php index.html index.htm;
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}
通过读取这个文件,我们得知在nginx.conf文件中不需要记录这一点!顺便提一下,$document_root指的就是在nginx.conf中设置的根目录。
更改php-fpm的配置
我认为可以在/etc/php-fpm.d/www.conf中进行php-fpm的配置更改。
+ user = nginx
- user = apache
+ group = nginx
- group = apache
#↓変更しません!
listen = /run/php-fpm/www.sock
+ listen.owner = nginx
+ listen.group = nginx
+ listen.mode = 0660
- ;listen.owner = nobody
- ;listen.group = nobody
- ;listen.mode = 0660
由于先前在/etc/nginx/conf.d/php-fpm.conf中提到了/run/php-fpm/www.sock,因此将该文件设置为/run/php-fpm/www.sock。
下载WordPress
$ cd /usr/share/nginx/html/
$ sudo wget https://ja.wordpress.org/latest-ja.tar.gz
$ sudo tar -xzvf latest-ja.tar.gz
$ sudo rm latest-ja.tar.gz
$ ls
wordpress
#ディレクトリ名をwordpressからtestに変更
$ sudo mv wordpress test
创建(复制)wp-config.php文件。
$ sudo cp test/wp-config-sample.php test/wp-config.php
修改权限
$ sudo chown -R nginx:ec2-user test/
$ sudo chown -R nginx:ec2-user /var/log/nginx
$ sudo chown -R nginx:ec2-user /var/log/php-fpm
$ sudo find test/ -type f -exec chmod 664 {} \;
$ sudo find test/ -type d -exec chmod 775 {} \;
$ sudo chmod 600 test/wp-config-sample.php
$ sudo chmod 600 test/wp-config.php
將權限設定為nginx:ec2-user的原因是為了進行SFTP連接等操作。
详细内容请参阅此处的说明。
另外,nginx和php-fpm的日志文件默认为apache,且无权限写入日志文件,因此需要更改权限。
$ ls /var/log
drwx------ 2 apache root 4096 12月 17 03:09 nginx
drwxrwx--- 2 apache root 268 11月 27 03:31 php-fpm
检查nginx语法并重新启动nginx和php-fpm。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl restart nginx
$ sudo systemctl restart php-fpm
修正 wp-config.php 文件。
将RDS信息添加到wp-config.php文件中。
以下修正:
主机名是RDS的终端节点。(对于Aurora,是写入实例)
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'database_name_here' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'username_here' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'password_here' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );

安装DB管理工具adminer
请复制此链接的URL,然后在 /usr/share/nginx/html/test 目录下进行下载。

$ cd /usr/share/nginx/html/test/
$ sudo wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php
$ ls
adminer-4.8.1.php その他
让我们试试访问一下。

使用Adminer时可能会出现错误消息“不正确的CSRF令牌。请重新发送”。这是因为nginx没有获得session目录的所有权所致,因此需要更改所有权。
$ cd /var/lib/php
$ ls -la
drwxrwx--- 2 root apache 6 7月 7 17:41 session
由于拥有权的团队,让我们将Apache更换为Nginx。
$ cd /var/lib/php
$ chown -R root:nginx session
原因的详细信息在这里↓
对于WordPress管理页面的网站健康问题,需要采取致命性问题的解决措施。
如果出现以下错误,则需要进行额外安装。
1つ以上の必須モジュールが存在しません
PHP モジュールはサイトの稼働に必要なほとんどのタスクをサーバー上で実行します。変更はサーバー管理者が実施する必要があります。
- オプションのモジュール dom がインストールされていないか、無効化されています。
- オプションのモジュール mbstring がインストールされていないか、無効化されています。
- オプションのモジュール imagick がインストールされていないか、無効化されています。
- 必須モジュール gd がインストールされていないか、無効化されています。

$ sudo yum install -y php php-dom
$ sudo yum install -y php php-mbstring
$ sudo yum install -y php php-imagick
$ sudo yum install -y php php-gd
$ sudo systemctl restart nginx
$ sudo systemctl restart php-fpm
使用SSL协议进行加密
您可以参考以下文章,了解将网站转为HTTPS的步骤。