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でパーマリンクが設定出来ないときの対処法

apacheでパーマリンクの設定をするときに

AllowOverride All

と設定するのは当たり前すぎて、ブログのネタにもならない話。

nginxでは

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

location / { ←この「location」の{}の中に
        try_files $uri $uri/ /index.php?$args;
         ↑これを追記

#systemctl restart nginx

参考サイト:【Nginx】WordPressのパーマリンクの設定で気をつけること

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 phpMyAdminのインストール

phpMyAdminのインストール

「phpMyAdmin」の公式サイトへ行き、アーカイブのダウンロードURLを確認する。

今回は
「phpMyAdmin-4.9.7-all-languages.tar.gz」をダウンロードしてインストールする。
「https://files.phpmyadmin.net/phpMyAdmin/4.9.7/phpMyAdmin-4.9.7-all-languages.tar.gz」のダウンロードURLを使用。

#cd /usr/share/nginx/html
htmlの下にphpmyadフォルダにインストールする。

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

#tar xvf phpMyAdmin-4.9.7-all-languages.tar.gz

#mv phpMyAdmin-4.9.7-all-languages phpmyad

初期設定

sessionディレクトリのパーミッション変更

#cd /var/lib/php
#ls -la

drwxrwx--- 2 root apache 4096 10月 28 01:30 session
パーミッション修正前

#chown root:nginx -R session

drwxrwx--- 2 root nginx 4096 10月 28 01:30 session
パーミッション修正後

php.iniの修正

#vi /etc/php.ini

1248行目あたり
;session.save_path = "/tmp"
↓
session.save_path = "/var/lib/php/session"
先程パーミッションを変更したディレクトリを指定

default.confの修正

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

location ~ \.php$ {
・・・
}
の記述の次あたりに下記を追記
location /phpmyad {
    root /usr/share/nginx/html/;
    index index.php index.html index.htm;

    #allow 許可IP;アクセス制限の設定
    #deny all;
}
location ~ ^/phpmyad/(.+\.php)$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME 
    $document_root$fastcgi_script_name;
    include fastcgi_params;
}
location ~* ^/phpmyad/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
    root /usr/share/nginx/html/;
}

php-mysqliのインストール

# yum install --enablerepo=remi,remi-php74 php-mysqli

nginxとphp-fpmの再起動

# systemctl restart php-fpm

# systemctl restart nginx

ブラウザで「http://000.000.000.000/phpmyad/」にアクセスしてログイン画面の表示確認