CentOS7 + nginx Let’s EncryptでバーチャルサイトのSSL化

前準備

Let’s Encryptを利用する場合にドメインでIPアドレスが正引き出来ることが前提条件となっているので正引きできることを確認

hostコマンドのインストール
# yum install bind-utils

正引きの確認
# host www.hogehoge.com
www.hogehoge.com has address 111.222.333.444

HTTPS 443ポートの開放
# firewall-cmd --add-port=443/tcp --permanent

ファイヤーウォールの再起動
# firewall-cmd --reload

443ポート開放の確認
# firewall-cmd --list-all

Let’s Encryptのインストール

epelレポジトリのインストール
# yum install epel-release

epelレポジトリのインストール後の確認
$ yum list installed | grep epel

certbotのインストール
# yum install certbot

certbotのインストール後の確認
$ yum list installed | grep certbot

certbotのインストール場所の確認
$ which certbot

certbotコマンドの実行

# certbot certonly --webroot -w /usr/share/nginx/hogehoge/ -d www.hogehoge.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: Aでenter

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Nでenter

「Congratulations」と表示されたら処理の完了

サーバー証明書ファイルの確認
# cd /etc/letsencrypt/live/www.hogehoge.com

dhparamコマンドの実行

dhparam用ファイル保存用ディレクトリ作成
# mkdir /etc/nginx/ssl

opensslコマンドでファイル作成
# openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

confファイルの修正

server {
listen 80;
server_name www.hogehoge.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl;
server_name www.hogehoge.com;
access_log /var/log/nginx/hogehoge-access.log main;
error_log /var/log/nginx/hogehoge-error.log;
root /usr/share/nginx/hogehoge;

ssl_certificate /etc/letsencrypt/live/www.hogehoge.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.hogehoge.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets on;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
index index.php index.html index.htm;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

confファイル保存後の書式エラー確認

書式のエラーチェック
# nginx -t

nginx再起動
# systemctl restart nginx

ブラウザで確認

「https://www.hogehoge.com/」
にアクセスして鍵マーク、証明書の確認

CentOS7 + nginx バーチャルホストの設定

設定ファイルの作成・修正

設定ファイルの作成・修正

# cd /etc/nginx/conf.d
コンフィグファイルのあるディレクトリへ移動

# cp -p default.conf hogehoge.conf
新たにバーチャルホストに設定するドメインのコンフィグファイルを「default.conf」をコピーして作成

#vi hogehoge.conf

server { ←の下
- server_name  localhost;
+ server_name  hogehoge.com;

location / { ←の下
- root /usr/share/nginx/html;
+ root /usr/share/nginx/hogehoge;

- index  index.html index.htm;
+ index index.html index.php;

location ~ \.php$ { ←の下
- root /usr/share/nginx/html;
+ root /usr/share/nginx/hogehoge;

バーチャルホストのドキュメントルート用のディレクトリ作成

# cd /usr/share/nginx

# mkdir hogehoge

テストページの設置

#vi /usr/share/nginx/hogehoge/idnex.html
<html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">Test Page</div>
</body>
</html>

設定の反映

書式のエラーチェック

#nginx -t

「nginx」の再起動

#systemctl restart nginx

「http://hogehoge.com」にブラウザでアクセスして表示確認する。

CentOS7 + nginx WordPressで大きいサイズのファイルアップロード時のエラーの対処法

CentOS7にPHPをインストールして、その上にWordPressを動かす際に、アップロードするファイルサイズの上限をPHPで設定するとワードプレス側でそれが反映される。

ワードプレスのアップロード画面

だが、表示されている上限内のファイルサイズをアップロードする際に下記のようなエラーが出る。

大きいファイルサイズのアップロード時のエラー

「サーバーから予期しないレスポンスがありました。ファイルは正しくアップロードされているかもしれません。メディアライブラリもしくはページをリロードして確認してください。」とのこと。

はぁ?・・・

ワードプレスのメディアを確認してみたところファイルはなく、リロードしても表示されない。つまりアップロードされていない。

実はこれ、nginx側もセキュリティの観点からアップロード出来るがファイルサイズに上限が設定されているらしく、それが悪さ?をしてるらしい。

#/etc/nginx/conf.d/default.conf

server { ←この「server」の{}中に
 client_max_body_size 20M;
  ↑これを追記

#systemctl restart nginx

上限サイズはPHPの設定と合わせてやるとトラブルがなくてよろしいかと。

参考サイト:Nginx での 413 Request Entity Too Large エラーの対処法

CentOS7 + nginx PHP7.4のインストール

phpのインストール

#rpm -qa | grep php
インストールされているパッケージの確認

#yum remove php-*
古いものがある場合は削除

#yum install epel-release
先にepelレポジトリを入れないとremiレポジトリが入らない

#rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Remiリポジトリの追加

#yum install --enablerepo=remi,remi-php74 php
PHP7.4のインストール

#php -v
バージョン確認

phpの初期設定

#vi /etc/php.ini

379行目あたり
expose_php = On
↓
expose_php = Off

694行目あたり
post_max_size = 8M
↓
post_max_size = 20M

846行目あたり
upload_max_filesize = 2M
↓
upload_max_filesize = 20M

923行目あたり
;date.timezone =
↓
date.timezone = "Asia/Tokyo"

1502行目あたり
;mbstring.language = Japanese
↓
mbstring.language = Japanese

ここでアップロードファイルサイズの上限を20MBに設定しているが、nginx側でも制御されるのでそれは「CentOS7 + nginx WordPressで大きいサイズのファイルアップロード時のエラーの対処法」の設定ページへ

php-fpmのインストール

#yum install --enablerepo=remi,remi-php74 php-fpm
#systemctl start php-fpm
#systemctl enable php-fpm
#systemctl status php-fpm