http アクセスを https にリダイレクトする
いまどき tcp:80 なんか開けなくていいよ。tcp:443 だけ開いていれば十分でしょう……という思いが強くてずっと tcp:80 はファイアウォールで叩き落としていたんですが、どうも Bing のサイト所有者確認は http 開けていないと通らないみたいですね。google は https だけ開けていれば通ったんですけど。
nginx の設定
しょうがないですね、tcp:80 も開けましょう。でも基本的には tcp:443 しか受け付けませんよ。という設定を nginx.conf に追加します。
tcp:80 のバーチャルサーバーを定義する
ということで、tcp:80 へのアクセスは tcp:443 に 301 moved permanently.
でリダイレクトします。
server { listen 203.143.127.234:80; server_name www.manimani.cc; return 301 https://manimani.cc$request_uri; access_log /var/log/nginx/redirect_access_log main; error_log /var/log/nginx/redirect_error_log info; } server { listen 203.143.127.234:80; server_name manimani.cc; return 301 https://manimani.cc$request_uri; access_log /var/log/nginx/access_log main; error_log /var/log/nginx/error_log info; }
サブドメイン www
付きのバーチャルサーバーを定義しているのは、サブドメイン "www" へのアクセスをリダイレクトする に書いた理由によります。
ログにサーバー側のポート番号を記録する
ついでに、nginx のアクセスログにポート番号と、あとバーチャルサーバー名を記録するようにします。
http { log_format main '$remote_addr - $remote_user [$time_local] ' '$server_name:$server_port ' # 追加 '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; : :
$server_name
を使用すると、どのバーチャルサーバー……要は www.manimani.cc
にアクセスしたのか manimani.cc
にアクセスしたのかが記録されます。$server_port
はそのままですね。'80' とか '443' とかが記録されます。
ip.addr.cli.ent - - [16/Apr/2017:13:26:52 +0900] www.manimani.cc:80 "GET /robots.txt HTTP/1.1" 301 400 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "-"
こんな感じで。
余談
nginx のサイト、色々なところからリンク張られてる wiki.nginx.org とか、大抵ページがなくなってるんですよね。ドキュメントがものすごく探しづらくて……というかリソースとしては残っているけどどこからもリンク張られていなくて、検索エンジンで引っかけるしかないような状態になっている気がします。
今回はログに出力する $server_name
$server_port
っていう変数を調べたかったので、参考にしたのはこのページですが、正攻法で nginx のトップページからここにたどり着く方法は不明です。