0. 環境

[CentOS] 6.8 (64bit版カーネル)
[Apache] 2.2.15

1. 問題

  • ApacheのProxyPassディレクティブ(mod_proxy)を指定して、バックエンドから受け取ったコンテンツを表示しようとするとhtmlタグがそのまま表示されてしまいます。

    • Apache設定ファイルの抜粋

      NameVirtualHost *:80
              
      # 省略
              
      <VirtualHost *:80>
          ServerAdmin test@local
          ServerName test.local
      
          ProxyPreserveHost On
          ProxyPass / http://127.0.0.1:8080/
          ProxyPassReverse / http://127.0.0.1:8080/
      
          ErrorLog logs/test.local-error_log
          CustomLog logs/test.local-access_log combined
      </VirtualHost>
      

2. 対策

  • ChromeのDeveloper Toolsなどで見ると、下記のようにHTTPレスポンスヘッダーで平文が指定されています。

    Content-Type text/plain; charset=UTF-8

  • デフォルトのMIMEタイプ指定を無効にすることで解消しました。

    • Apache設定ファイルの抜粋

      NameVirtualHost *:80
              
      # 省略
              
      <VirtualHost *:80>
          ServerAdmin test@local
          ServerName test.local
      
          # ----- この行を追加 ----- 
          DefaultType None
          # ----- この行を追加 ----- 
      
          ProxyPreserveHost On
          ProxyPass / http://127.0.0.1:8080/
          ProxyPassReverse / http://127.0.0.1:8080/
      
          ErrorLog logs/test.local-error_log
          CustomLog logs/test.local-access_log combined
      </VirtualHost>
      

3. 参考ページ