サーバ証明自動更新のエラー修正ほか

・エラー修正
サーバ証明の更新時にエラーメールが届く。
エラーは以下の通り

Attempting to renew cert (email.domain) from /etc/letsencrypt/renewal/email.domain.conf produced an unexpected error:
Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping.
All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/email.domain/fullchain.pem (failure)
1 renew failure(s), 0 parse failure(s)
完了しました。

letsencrypt導入時の設定が問題だった。certbot-auto renewal実行時にnginxが443ポートを使っているためエラーが生じていた。
認証方式をstandaloneからwebrootへ設定変更。/etc/letsencrypt/renewal/email.domain.confに以下を記述

#authenticator = standalone
authenticator = webroot
[[webroot_map]]
mail.domain = /usr/share/nginx/html

 

・本サイトのSSL化
諸事情で本サイトは SSL化せずにいた。wordpressのプラグイン修正で問題解決したためSSL化した。
調べればわかるが証明書発行は以下のコマンドでできる。

/usr/local/certbot/certbot-auto certonly --webroot -w /usr/share/nginx/html -d domain.name

リダイレクトの設定などはtsuchikazuさんという方のブログを参照

証明書を nginx へ設定

nginxの設定を変更してSSLを有効にしましょう。設定ファイルはこんな感じになります。

# httpはhttpsへリダイレクト
server {
  listen 80;
  server_name tsuchikazu.net;
  rewrite ^ https://$server_name$request_uri? permanent;
}
server {
    listen 443 ssl;

    server_name tsuchikazu.net;

    ssl_certificate /etc/letsencrypt/live/tsuchikazu.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tsuchikazu.net/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets on;
……

参照 Let’s Encryptの証明書をnginxに設定してhttps化した | tsuchikazu blog

nginxでBasic認証かけると404になる

kifuyu.netに非公開のページを作りたくてBasic認証を導入しました。
NginxでBasic認証を行うためにはApacheでいう.htaccessのようなファイルに書き足す必要があります。
今回はBasic認証導入後に404が連発してしまったのでその対処のメモ書きです。

▶任意のディレクトリにBasic認証をかける
▶locationの記述位置を誤ると404

・パッケージの導入

$ sudo yum install -y httpd-tools
$ sudo htpasswd -c /etc/nginx/conf.d/.htpasswd <userName>

ここまでで/etc/nginx/conf.d/.htpasswdに <userName>のパスワードが生成されてます。
htpasswdのオプションを-cから-mにするとMD5でハッシュされます。気になる人は後者の方がいいかもしれませn。
ところでNginxでは設定をファイルごとにincludeできるので、私はconf.dというディレクトリを作ってconfファイルを分割して格納しています。

・Nginxのconfファイルの設定を行う

$ vi /etc/nginx/conf.d/<httpの設定が書かれたconfファイル>.conf

ある任意のディレクトリ “nyan”にBasic認証をかけます

server {
location / { ....
    location /nyan/ {
            auth_basic "Auth";
            auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
    } #location /naynの終
} #location / の終

注意しないといけないのはディレクトリ”nyan”のlocation設定がRoot以下のlocation設定内に書かれてないといけないことです。
リファレンス読まずlocationごとに中括弧をつけていたので404連発でした。

しっかし平文でパスワードやりとりするのは…

送信したメールが迷惑メール扱いされてしまう!

事象:独自ドメインからGmailへメールが送れない
対処:SPFレコードとPostfixの設定を修正

事の始まり:
独自ドメインを手に入れたのでメールサーバを構築した.ところがしばらくして以下のメールがGmailから送られてきた.

省略…
550-5.7.1 This message does not have authentication information or fails to pass 550-5.7.1 authentication checks.
To best protect our users from spam, the 550-5.7.1 message has been blocked.
Please visit 550-5.7.1 https://support.google.com/mail/answer/81126#authentication
…省略

Spam基準に抵触するので独自ドメインからのメールを受信拒否しているとのこと.そこで,記載されたURLに従い
・DKIMで署名
・SPFレコードの公開
を行った.(これらの設定は他サイトで細かにあると思うので省略)
2,3日は問題なかったものの,今度は次のメールが届いて再び送信できなくなった.

省略…
Our system has detected 550-5.7.1 that this message is likely suspicious due to the very low reputation 550-5.7.1 of the sending IP address.
To best protect our users from spam, the 550-5.7.1 message has been blocked.
…省略

原因:SPFレコードの内容とPostfixの設定に誤りがあった
メールサーバがIPv6で送信しているにも関わらず、SPFレコードにIPv4で記述していたことが問題だった.
SPFレコードは

v=spf1 +ip4:***.***.***.*** +mx:doma.in~all

のままで,Postfixの設定ファイル(main.cf)にある

ipnet_protocols = all
->
ipnet_protocols = ipv4

に変更した. IPv6で統一しても良かったのですが,馴染みのあるIPv4にした.これでspam扱いは解除された(・∀・)

Mathjax-Latexを導入

記事中に数式を挿入するためプラグインのMathjax-Latexを導入。
設定項目でForce Loadにcheckすると変換用のJavaScriptが投稿ごとに読み込まれるようになる。

Force the MathJax JavaScript to be loaded on every post. This removes the need to use the shortcode.

例えば2次方程式\(ax^2+bx+c=0\)の解は
\(x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}\)

棋譜再生のためMIMEを追記

棋譜の再生環境を整えている.
なお,棋譜の再生ではkifu for jsがいまいち使いこなせないので代替としてkifu for flashを使う.
こっちもこっちで問題が発生しているのだけれど,それはまた今度.

今回はWordpressのメディアライブラリに棋譜をアップロードしようとすると
“セキュリティ上の理由によりこのファイル形式は許可されていません。”
と出てしまうのに対する備忘録.

解決は/wp-includes/function.php内の関数に棋譜ファイルの定義を加えるだけ.
なお,デフォルトのMIMEはfunction wp_get_mime_types() {}に記述されているため手をつけないようにする.
棋譜(.kif)のMIMEはタイプ/サブタイプになるよう勝手に定義した.

function custom_mime_types( $mimes ) {
$mimes[‘kif’] = ‘text/kifu’;
return $mimes;
}
add_filter( ‘upload_mimes’, ‘custom_mime_types’ );

を追記.

参照
拡張子とMIMEタイプ
WordPress:特定のファイルタイプをアップロード可能・不可能にする方法 | NxWorld