http アクセスを https にリダイレクトする

いまどき tcp:80 なんか開けなくていいよ。tcp:443 だけ開いていれば十分でしょう……という思いが強くてずっと tcp:80 はファイアウォールで叩き落としていたんですが、どうも Bing のサイト所有者確認は http 開けていないと通らないみたいですね。google は https だけ開けていれば通ったんですけど。

しょうがないですね、tcp:80 も開けましょう。でも基本的には tcp:443 しか受け付けませんよ。という設定を nginx.conf に追加します。

ということで、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 のトップページからここにたどり着く方法は不明です。

  • wiki/manimani.cc/redirect_80_to_443
  • 最終更新: 2019/02/17 15:59