treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

httpアクセスをhttpsアクセスに変える

今日はApacheのconf設定についてご報告します。
ですが、現実世界ではこの三連休ずっとレイアウト変更のためのモール貼って配線⇒机移動して配線、という肉体労働をひたすら(最低でも40時間くらいは)やってました。体の節々が痛いです。寄る年波には勝てませんのう。

このリダイレクト動作、設定自体は基本の内容ですので、ご存知の方はもうここでおしまいです。
httpアクセスを同URLのhttpsにリダイレクトしたい、というだけなのです。

昨日(.htaccessファイルに記述したのに動作が変わらない - treedown’s Report)は.htaccessファイルで躓きましたが、結局Apacheのconfファイルで対処を実施しました。

やること

フォーム入力画面(https://www.hoge.co.jp/sslform/)がSSLリンクでない。
これではフォームの入力データが平文で流れてしまいます。

このURLをSSL対応するためにApacheの設定にてhttpsに変更してしまいたいです。

mod_rewriteの確認

対象の環境で「mod_rewrite」が有効であることを確認します。
----------------------------------------------
# cat /etc/httpd/conf/httpd.conf | less
# rpm -qa | grep httpd
httpd-2.2.3-91.el5.centos
# which modules
/usr/bin/which: no modules in (/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin)
# find / | grep mod_rewrite.c
# find / | grep mod_rewrite
/usr/lib/httpd/modules/mod_rewrite.so
# rpm -ql httpd | grep rewrite
/usr/lib/httpd/modules/mod_rewrite.so
# cat /etc/httpd/conf/httpd.conf | grep rewrite_module
LoadModule rewrite_module modules/mod_rewrite.so
#
----------------------------------------------
mod_rewriteはロードされているので利用可能でした。

confファイルの編集から実行

早速httpd.confに記述して動作確認しました。
----------------------------------------------
$ sudo vi httpd.conf
$ sudo tail -10 httpd.conf
## Admin Page SSL Rewrite Option
#
<Directory /var/www/html/admin>
      <IfModule mod_rewrite.c>
              RewriteEngine on
              RewriteCond %{HTTPS} off
              RewriteRule ^(.*)$ https://www.hoge.co.jp/sslform/$1 [R=302, L]
      </IfModule>
</Directory>

$ sudo /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: Syntax error on line 1008 of /etc/httpd/conf/httpd.conf:
RewriteCond: bad flag delimiters
                                                           [FAILED]
----------------------------------------------
おや?エラーでストップしちゃいました。
構文エラー、ということです。どうやら"[R=302, L]"と空白(スペース)が入っていると「RewriteCond: bad flag delimiters」エラーとなってしまうようです。
ここはスペースを除いて"[R=302,L]"とし、再度httpdをリスタートします。
----------------------------------------------
$ sudo vi ./httpd.conf
$ sudo /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
$ sudo /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
$ sudo tail -10 httpd.conf
----------------------------------------------
無事起動しました。リスタートも問題なく(停止⇒開始)できているので記述に問題はなさそうです。では動作確認してみます。
<http://www.hoge.co.jp/sslform/>にアクセスすると、ブラウザの表記が<https://www.hoge.co.jp/sslform/>に自動変更されることが確認できます。

動作確認までOKです。