nginx+WordPressで個人ブログを構築するプロセス全体の詳細な説明

nginx+WordPressで個人ブログを構築するプロセス全体の詳細な説明

0x00 はじめに

WordPress は、世界で最も人気のある CMS システムです。PHP と MySQL のテクノロジー スタックをベースとしており、多くのプラグインを備えているため、拡張性が非常に高くなっています。最近、たまたま余った ECS があったので、楽しみのために 1 つ作ってみました。このチュートリアルは、LEMP テクノロジー スタックに基づいて構築されています。バージョンは次のとおりです。

  1. LバージョンはCentOS7.6です。
  2. Eバージョンはnginx1.12.2です
  3. MバージョンはDistrib 5.5.60-MariaDBです
  4. Pバージョンはphp7.2です

さらに、完全なhttpsがトレンドになっており、当然遅れるわけにはいかないので、Let's Encryptを使用して構成用の無料のSSL証明書も生成します。

0x01 前提条件

  • ドメイン名があります。私のドメイン名はnomansky.xyzです
  • VPSまたはクラウドサーバーは、国内IPの場合は登録が必要です
  • sudoまたはroot権限を持つユーザー。ここでは、プログラムを実行するための新しいWordPressユーザーを作成し、次のコマンドを使用してnologinに設定します。
    • a. sudo useradd -s /sbin/nologin wordpress
  • sudo yum install -y epel-release を使用して epel ソースをインストールしました
  • ファイアウォールをオフにします。セキュリティ強化のために iptables を使用することをお勧めします。
    • a. sudo systemctl stop ファイアウォールd
    • b. sudo systemctl でfirewalldを無効にする

0x02 nginxをインストールする

  • sudo yum install nginx を実行して nginx をインストールします。
  • nginxデーモンを起動し、起動時に自動的に起動するように設定します。
    • a. sudo systemctl start nginx
    • b. sudo systemctl enable nginx
  • wordpressユーザーをnginxグループに追加します(usermod -a -G nginx wordpress)、ディレクトリの権限を設定します(chmod 770 -R /var/lib/nginx/)。
  • この時点で、http://nomansky.xyz にアクセスすると、次のページが表示されます。これは、nginx が正常にインストールされたことを意味します。

0x03Mariadbをインストールする

Mariadb は MySQL のオープンソース ブランチとして、MySQL に代わる CentOS のデフォルト データベースとして使用されているので、ここでもデータベースとして Mariadb を使用します。

  • sudo yum install mariadb-server -yを実行してmariadbをインストールします。
  • Mariadbを起動し、起動時に自動的に起動するように設定します。
    • a. sudo systemctl でmariadbを起動します
    • b. sudo systemctl を有効にする mariadb
  • Mariadb を保護するには、sudo mysql_secure_installation を実行します。データベースのルートパスワードの設定、匿名ユーザーの削除、データベースのルートユーザーをローカルホストに制限、テストデータベースの削除の要件が表示されます。以下の図に示すように、これらすべてにY (はい) を選択することをお勧めします。デフォルトのデータベースのルートパスワードは空白です。

さらに、mariadbがリッスンするアドレスを127.0.0.1:3306変更する必要があります。

a. vim /etc/my.cnf.d/server.cnf実行してMariadb設定ファイルを開きます。

b. [mysqld]の下にbind=127.0.0.1を追加します。


c. systemctl restart mariadbを実行してデータベースを再起動します。

d. netstat -lntpを実行すると、ローカル ループバック アドレスをリッスンしていることがわかります。

0x04 データベースを作成する

mariadbデータベースをインストールして強化した後は、当然、データを保存するための新しいデータベースを作成する必要があります。ここでは、最初に以前に設定したルートアカウントのパスワードを使用してデータベースにログインします。mysql mysql -uroot -p 、次のステートメントを実行します。

CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; # データベースを作成 GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'your password'; # ユーザーを作成 FLUSH PRIVILEGES; # データベース権限を更新 EXIT;

0x05 PHPをインストールする

CentOSのデフォルトのPHPバージョンは5.4ですが、WordPressの推奨バージョンは7.2なので、ここではPHP 7.2バージョンをインストールします。以下のコマンドを実行して、PHPと必要なPHP拡張機能をすべてインストールします。

sudo yum yum-utilsをインストールします
sudo yum インストール http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php72
sudo yum インストール php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl

私たちは Web サーバーとして Nginx を使用していますが、Nginx にはこのコンポーネントが付属していないため、PHP FPM をインストールします。さらに、PHP FPM はデフォルトでポート 9000 で apache ユーザーとして実行されます。このユーザーを wordpress に変更し、TCP ソケットから Unix ソケットに変更します。変更方法の詳細については、以下の手順を参照してください。

/etc/php-fpm.d/www.confを開き、以下の箇所を修正します。

...
ユーザー = wordpress
...
グループ = wordpress
...
listen = /run/php-fpm/www.sock
...
listen.owner = wordpress
listen.group = ワードプレス

sudo chown -R root:wordpress /var/lib/phpコマンドを使用して、ディレクトリのすべてのグループ権限がwordpressであることを確認します。

PHP FPMを自動的に再起動して起動する

a. sudo systemctl restart php-fpm
b. sudo systemctl enable php-fpm

0x06 無料証明書を申請する

技術オタクとして、無料の証明書が利用できる場合は必ずそれを利用します。したがって、無料の Let's Encrypt 証明書を申請することができます。これは無料であるだけでなく、非常に使いやすいものです。有効期間は 90 日間のみですが、スクリプト構成 crontab を通じて定期的に更新できます。

a. mkdir -p /etc/nginx/sslディレクトリに証明書が保存されます

b. openssl genrsa 4096 > account.keyこのディレクトリに入り、Let's Encryptがあなたを識別するためのRSA秘密鍵を作成します

c. openssl genrsa 4096 > domain.keyてドメイン名の RSA 秘密鍵を作成します。

d. openssl req -new -sha256 -key domain.key -out domain.csr秘密鍵ファイルを使用して、CSR ファイルを生成できます。 CSR を生成するときに、いくつかの情報を入力するよう求められます。ここで、Common Name はドメイン名です。

CA が DV (ドメイン検証) 証明書を発行する場合、ドメイン名の所有権を確認する必要があることはわかっています。従来の CA 検証方法では、通常、[email protected] に検証メールを送信しますが、Let's Encrypt はサーバー上にランダムな検証ファイルを生成し、CSR の作成時に指定したドメイン名を通じてそのファイルにアクセスします。アクセスできる場合、ドメイン名を制御できることを意味します。まず、検証ファイルを保存するディレクトリを作成します。例:
mkdir /home/wordpress/challenges

次に、Nginx を例にして HTTP サービスを設定します。

サーバー{
  サーバー名 www.nomansky.xyz nomansky.xyz;

  場所 ^~ /.well-known/acme-challenge/ {
    エイリアス /home/wordpress/challenges/;
    try_files $uri =404;
  }

  位置 / {
    ^/(.*)$ https://nomansky.xyz/$1 を永久に書き換えます。
  }
}

上記の設定は、/home/wordpress/challenges/ ディレクトリ内のファイルを検索し、見つからない場合は HTTPS アドレスにリダイレクトすることを意味します。この検証サービスは、将来証明書を更新するときに再度使用されるため、常に保持する必要があります。

次に、acme-tiny を ssl ディレクトリに保存しますwget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py

次に、アカウントの秘密鍵、CSR、検証ディレクトリを指定して、スクリプトpython acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /home/wordpress/challenges/ > ./signed.crtを実行し、次の図を確認します。これは、生成が成功したことを意味します。

最後に、Let's Encrypt の中間証明書をダウンロードする必要があります。HTTPS 証明書を構成するときは、中間証明書を省略したり、ルート証明書を含めたりしないでください。 Nginx の設定では、中間証明書と Web サイト証明書を組み合わせる必要があります。

wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > 中間.pem
cat signed.crt 中間.pem > 連鎖.pem

後でOCSP Staplingをスムーズに有効化するために、ルート証明書と中間証明書を結合します(この手順は省略することもできます)

wget -O - https://letsencrypt.org/certs/isrgrootx1.pem > root.pem
cat 中間.pem ルート.pem > フルチェーン.pem

Let's Encrypt によって発行された証明書は 90 日間のみ有効です。スクリプトを使用して定期的に更新することをお勧めします。 renew_cert.shを作成し、 chmod a+x renew_cert.shで実行権限を付与します。ファイルの内容は次のとおりです。

#!/bin/bash

/etc/nginx/ssl/ をコピーします
python acme_tiny.py --account-key account.key --csr domain.csr --acme-dir /home/wordpress/challenges/ > signed.crt || exit
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > 中間.pem
cat signed.crt 中間.pem > 連鎖.pem
systemctl nginx を再起動します

crontabl 0 0 1 * * /etc/nginx/ssl/renew_cert.sh >/dev/null 2>&1でスケジュールされたタスクを設定します

0x07 WordPressをダウンロードしてNginxを設定する

WordPressを/home/wordpress/ディレクトリにダウンロードしますwget https://wordpress.org/latest.tar.gz

tar zxvf latest.tar.gz実行してWordPressファイルを抽出します。

chown -R wordpress:wordpress wordpress wordpressディレクトリの所有者をwordpressユーザーに変更します

次に、 vim /etc/nginx/nginx.confを開き、nginxの実行ロールをwordpressに変更します。

···
ユーザー wordpress;
ワーカープロセスは自動です。
···

次に、分離を目的として、メイン構成ファイル nginx.conf 内のサーバー構成ブロックをコメント アウトします。

新しいsudo mkdir /etc/nginx/snippetsディレクトリを作成し、 vim letsencrypt.confを実行して次の設定を貼り付けます。

場所 ^~ /.well-known/acme-challenge/ {
   エイリアス /home/wordpress/challenges/;
   try_files $uri =404;
}

次に、新しいvim /etc/nginx/conf.d/wordpress.conf設定ファイルを作成し、次の設定に変更します。

 # HTTP -> HTTPS にリダイレクト
  サーバー{
    聞く 80;
    サーバー名 www.nomansky.xyz nomansky.xyz;

    snippets/letsencrypt.conf を含めます。
    301 https://nomansky.xyz$request_uri を返します。
  }

  # WWW を NON WWW にリダイレクト
  サーバー{
    443 ssl http2 をリッスンします。
    サーバー名 www.nomansky.xyz;

    ssl_certificate /etc/nginx/ssl/chained.pem;
    ssl_certificate_key /etc/nginx/ssl/domain.key;

    301 https://nomansky.com$request_uri を返します。
  }

  サーバー{
    443 ssl http2 をリッスンします。
    サーバー名 nomansky.com;

    ルート /home/wordpress/wordpress;
    インデックスindex.php;

    # SSLパラメータ
    ssl_certificate /etc/nginx/ssl/chained.pem;
    ssl_certificate_key /etc/nginx/ssl/domain.key;

    # ログファイル
    アクセスログ /home/wordpress/log/nomansky.xyz.access.log;
    error_log /home/wordpress/log/nomansky.xyz.error.log;

    場所 = /favicon.ico {
      log_not_found オフ;
      access_log オフ;
    }
    
          場所 = /robots.txt {
      すべて許可する。
      log_not_found オフ;
      access_log オフ;
    }

    位置 / {
      try_files $uri $uri/ /index.php?$args;
    }

    場所 ~ \.php$ {
      try_files $uri =404;
      fastcgi_pass unix:/run/php-fpm/www.sock;
      fastcgi_index インデックス.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_params を含めます。
    }

    場所 ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
      有効期限が最大になります。
      log_not_found オフ;
    }

ログディレクトリmkdir -p /home/wordpress/logを作成し、権限を設定しますchown -R wordpress:wordpress /home/wordpress/log

nginx -t構文チェックが正常かどうかを確認します。正常であれば、 nginx -s reload nginx をリロードします。

次に、WordPress ページが正常に開かれ、完了していることが確認できます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WordPress をベースに個人ブログをゼロから構築する方法を教える 6 つのステップ
  • ホストNginx + Docker WordPress Mysqlを設定するための詳細な手順
  • Nginx 環境での WordPress マルチサイト構成の詳細な説明
  • Nginx で WordPress 擬似静的を設定する方法の例
  • Nginx で WordPress を設定する方法
  • WordPress ウェブサイトのアクセスが遅い問題を解決する方法に関する詳細なグラフィックチュートリアル

<<:  Vue はグラフィック検証コードログインを実装します

>>:  MySQL はエンタープライズレベルのログ管理、バックアップ、リカバリの実践的なチュートリアルを実装します

推薦する

MySql の 4 つのトランザクション分離レベルについて簡単に説明します。

分離レベル:隔離はあなたが考えるよりも複雑です。 SQL 標準では 4 つの分離レベルが定義されてお...

知らないかもしれない奇妙で興味深いDockerコマンド

はじめに使えるかもしれないが、あまり使われていない、シンプルで実用的なDockerコマンドをいくつか...

...

MySQL で複数のフィールドを連結する詳細な例

MySQL クエリ結果の行フィールドの結合は、次の 2 つの関数を使用して実装できます。 1. co...

Linux で TCP 接続の最大数をテストする方法

序文TCP サーバの最大同時接続数に関して、「ポート番号の上限が 65535 であるため、TCP サ...

MySQL フェイルオーバー ノート: アプリケーション対応設計の詳細な説明

1. はじめに周知のように、データベース ミドルウェアの読み取り/書き込み分離のアプリケーション シ...

Win10 MySQLでCSVをエクスポートする2つの方法

Win10 で csv をエクスポートする方法は 2 つあります。1 つ目はツールを使用することです...

Linux で文字列を整理するためのヒント

Linuxの操作では、ファイル内の文字列を置換したりカウントしたりすることが多いです。ここでまとめを...

XHTML チュートリアル: Transitional と Strict の違い

実際、XHTML 1.0 は、Transitional DOCTYPE と Strict DOCTY...

Vue SPA ファースト スクリーン最適化ソリューション

目次序文最適化ソ連オンデマンドインポート1. ルーティングファイルでコンポーネントをオンデマンドでイ...

CSS3 でテキストの点滅効果を実現する 3 つの方法 サンプルコード

1. 透明度を変更してテキストを徐々に点滅させると、次のような効果が得られます。 <!DOCT...

無効にしてHTMLフォーム入力を送信した後にフォーム値が取得されない問題を解決する方法

フォーム入力ボックスの入力をdisable属性に設定して送信すると、入力ボックスの値を取得できなくな...

gbk utf8 GBK と UTF-8 ウェブページエンコーディングを正しく理解して使用する方法

Web ページ エンコーディングは英語では web page encoding と翻訳され、Web ...

CentOS7でルートパスワードをリセットする方法

レンガを移動するプロセスでは、さまざまな環境および構成の問題があり、毎回異なるエラーが発生します。 ...

MySQL sql99構文の内部結合と非等価結合の詳細な説明

#事例: 従業員の給与水準を照会する 選択 給与、等級 から 従業員 参加する ジョブグレード g ...