使用EC2 + RDS + Nginx + PHP8 + Adminer搭建WordPress

首先

由于nginx和php-fpm的配置相互影响,所以我在某些方面感到困难,因此我将其记录下来。

前提条件

スクリーンショット 2021-12-15 20.15.55.png

– 溪水流动
– 水流
– 水的动向
– 过去的事情
– 事物的变化
– 自然的进程

    1. EC2的初始设置

 

    1. 在EC2上安装PHP和nginx

 

    1. 修改nginx.conf配置文件

 

    1. 修改php-fpm配置

 

    1. 安装DB管理工具adminer

 

    1. 修复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指令用于处理所有的访问请求。从左侧开始,在文档根目录下查找,并按以下三个步骤处理。

    1. $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' );
スクリーンショット 2021-12-15 22.01.04.png

安装DB管理工具adminer

请复制此链接的URL,然后在 /usr/share/nginx/html/test 目录下进行下载。

スクリーンショット 2021-12-15 22.37.53.png
$ 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 その他

让我们试试访问一下。

スクリーンショット 2021-12-15 22.43.47.png

使用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 がインストールされていないか、無効化されています。
スクリーンショット 2021-12-15 22.29.11.png
$ 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的步骤。

请看

bannerAds