8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SSLアクセラレータの裏のApacheにアプリケーションを設置するtips

8
Last updated at Posted at 2014-04-09

まとめ

  1. Apacheのmod_envで SetEnv HTTPS on
  2. Apacheのconfファイルで ServerName https://www.example.com:443
  3. アプリケーション内の非SSLなURLの定数をつぶす()

何が問題か?

SSL処理はSSLアクセラレータが受け持つので、HTTPサーバとアプリケーションは素のHTTP環境下で動作することになります。

アプリケーション自体は通信が暗号化されていようがいまいが、特に関係ありません。

とあるプロジェクトで発覚した問題は、以下2パターンでした。

  1. (HTML中や、Locationヘッダでリダイレクト先として使う)URLを生成する際にSSLでないアドレスが生成される場合がある。
  2. SSLを強制したいシーンで、自分がSSL環境下にあるかどうか判定できずエラーになったり、再帰的リダイレクトが発生する。

解説

環境変数 HTTPS

仕様があるのか不明ですが、mod_sslのマニュアルとかPHPの$_SERVERのマニュアルには記述があります。SSL環境下では on ないし ON が設定されます。SSL環境下 でない 場合は設定されませんが、IISの場合のみ、SSL でない 状態で off が入っているそう。

アプリケーションが、SSL環境下で動作しているかどうか判定に使っていました。

ServerNameの変更

スクリプトが実行されているサーバの名前として、環境変数 SERVER_NAME に設定されます。

URL生成のネタとして使用している部分がありました。

定数値

なんともできません。grepしましょう。

設定例

Apacheのバーチャルホスト機能を使って、SSLアクセラレータとやりとりするポートを専用に割り当て、その中で設定するのがベターでしょうか。
尚、ServerNameのホスト名は、SSLアクセラレータのホスト名と同じになります。

<VirtualHost *:10443>
    ServerAdmin webmaster@www.ssl-axl.com
    DocumentRoot "c:/prg/Apache24/htdocs"
    ServerName https://www.ssl-axl.com:443
    ErrorLog "logs/www.ssl-axl.com-error.log"
    CustomLog "logs/www.ssl-axl.com-access.log" common
    SetEnv HTTPS on
</VirtualHost>
8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?