質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.97%

Apache ProxyPassReverseがうまく動作しないようです。どうかお助け下さい。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,227

youko

score 14

前提・実現したいこと

新環境にサーバの引越しを行っています。
旧環境では動作しているモジュールが新環境で動きません。

http://www.hoge-global.com/sub/contact/products/
前任者が作成したFuelPHP製のフォームにアクセスすると404 Bad Requestになります。

ApacheのAliasとProxyPassReverseが効いていないのかと考えていますが、
ApacheのProxy系には不勉強でどうすれば良いか途方にくれています。

ローカルでも検証しましたがFuelPHPに関係なく駄目なようです。
宜しくお願い致します。

ローカル環境の検証状況を張ります。

発生している問題・エラーメッセージ

正常表示

# wget http://www.hoge-global.com
--2017-10-04 19:41:07--  http://www.hoge-global.com/
www.hoge-global.com をDNSに問いあわせています... 192.168.11.27
www.hoge-global.com|192.168.11.27|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 38 [text/html]
`index.html' に保存中

100%[===================================================================================================>] 38          --.-K/s 時間 0s

2017-10-04 19:41:07 (16.0 MB/s) - `index.html' へ保存完了 [38/38]
# wget http://www.hoge-global.com/sub/contact/products/

--2017-10-04 20:08:29--  http://www.hoge-global.com/sub/contact/products/
www.hoge-global.com をDNSに問いあわせています... 192.168.11.27
www.hoge-global.com|192.168.11.27|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 400 Bad Request
2017-10-04 20:08:29 エラー 400: Bad Request。

400エラーが発生します。

# wget http://www.hoge-global.com/contact/products/

--2017-10-04 19:46:00--  http://www.hoge-global.com/contact/products/
www.hoge-global.com をDNSに問いあわせています... 192.168.11.27
www.hoge-global.com|192.168.11.27|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 59 [text/html]
`index.html.1' に保存中

100%[===================================================================================================>] 59          --.-K/s 時間 0s

2017-10-04 19:46:00 (31.4 MB/s) - `index.html.1' へ保存完了 [59/59]

400エラー

# wget http://hoge_sub.fuel.local

--2017-10-04 19:46:28--  http://hoge_sub.fuel.local/
hoge_sub.fuel.localDNSに問いあわせています... 127.0.0.1
hoge_sub.fuel.local|127.0.0.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 400 Bad Request
2017-10-04 19:46:28 エラー 400: Bad Request

400エラー

# wget http://hoge_sub.fuel.local/contact/products/

--2017-10-04 19:46:38--  http://hoge_sub.fuel.local/contact/products/
hoge_sub.fuel.localDNSに問いあわせています... 127.0.0.1
hoge_sub.fuel.local|127.0.0.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 400 Bad Request
2017-10-04 19:46:38 エラー 400: Bad Request

該当のソースコード

何か設定が足りない気がします...。

まずはWindowsのhostsに設定

192.168.11.27 hoge-global.com www.hoge-global.com

次にサーバのhostsに設定

# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 hoge-global.fuel.local hoge_sub.fuel.local
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.11.27 www.hoge-global.com hoge-global.com
# vi /etc/httpd/conf/httpd.conf


ServerName localhost:80
# mkdir -p /home/web/hoge-global/public

# mkdir -p /home/web/hoge-global/app/public

# mkdir -p /home/web/hoge_sub/app/public


# mkdir -p /home/web/hoge-global/app/public/contact/products/

# mkdir -p /home/web/hoge_sub/app/public/contact/products/
# vi /home/web/hoge-global/public/index.php

<?php
echo __FILE__;




# vi /home/web/hoge-global/app/public/index.php

<?php
echo __FILE__;





# vi /home/web/hoge-global/app/public/contact/products/index.php

<?php
echo __FILE__;





# vi /home/web/hoge_sub/app/public/index.php

<?php
echo __FILE__;



# vi /home/web/hoge-sub/app/public/contact/products/index.php

<?php
echo __FILE__;
# vi /etc/httpd/conf.d/hoge-global.com.conf



NameVirtualHost *:80



<VirtualHost *:80>
  DocumentRoot /home/web/hoge-global/public
  ServerName www.hoge-global.com
  ServerAlias hoge-global.com
  ErrorLog logs/hoge-global-error.log
  CustomLog logs/hoge-global-access.log common

  <Location "/contact/products">
      ProxyPass http://hoge-global.fuel.local/contact/products
      ProxyPassReverse http://hoge-global.fuel.local/contact/products
  </Location>


  <Location "/sub/contact/products">
      ProxyPass http://hoge_sub.fuel.local/contact/products
      ProxyPassReverse http://hoge_sub.fuel.local/contact/products
  </Location>


  <Directory "/home/web/hoge-global">
    AllowOverride All
    Order allow,deny
    Allow from all

    # Apache2.4対応の為変更
    #Require all granted
  </Directory>

  Alias /sub /home/web/hoge_sub/public

  <Directory "/home/web/hoge_sub">
    AllowOverride All
    Order allow,deny
    Allow from all
    # Apache2.4対応の為変更
    #Require all granted
  </Directory>
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /home/web/hoge-global/app/public
  ServerName hoge-global.fuel.local
  ErrorLog logs/hoge-global-error.log
  CustomLog logs/hoge-global-access.log common
  <Directory "/home/web/hoge-global/app/public">
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>


<VirtualHost *:80>
  DocumentRoot /home/web/hoge_sub/app/public
  ServerName hoge_sub.fuel.local
  ErrorLog logs/hoge_sub-error.log
  CustomLog logs/hoge_sub-access.log common
  <Directory "/home/web/hoge_sub/app/public">
    AllowOverride All
    Order allow,deny
    Allow from all
    # Apache2.4対応の為変更
    #Require all granted
  </Directory>
</VirtualHost>
# httpd -t
# service httpd restart

httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

サーバ内部から検証します。

# wget http://www.hoge-global.com
--2017-10-04 19:41:07--  http://www.hoge-global.com/
www.hoge-global.com をDNSに問いあわせています... 192.168.11.27
www.hoge-global.com|192.168.11.27|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 38 [text/html]
`index.html' に保存中

100%[===================================================================================================>] 38          --.-K/s 時間 0s

2017-10-04 19:41:07 (16.0 MB/s) - `index.html' へ保存完了 [38/38]


正常到達

# wget http://www.hoge-global.com/contact/products/

--2017-10-04 19:46:00--  http://www.hoge-global.com/contact/products/
www.hoge-global.com をDNSに問いあわせています... 192.168.11.27
www.hoge-global.com|192.168.11.27|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 59 [text/html]
`index.html.1' に保存中

100%[===================================================================================================>] 59          --.-K/s 時間 0s

2017-10-04 19:46:00 (31.4 MB/s) - `index.html.1' へ保存完了 [59/59]

正常到達

# wget http://hoge-global.fuel.local
--2017-10-04 19:46:12--  http://hoge-global.fuel.local/
hoge-global.fuel.local をDNSに問いあわせています... 127.0.0.1
hoge-global.fuel.local|127.0.0.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 42 [text/html]
`index.html.2' に保存中

100%[===================================================================================================>] 42          --.-K/s 時間 0s

2017-10-04 19:46:12 (21.9 MB/s) - `index.html.2' へ保存完了 [42/42]


正常到達

# wget http://www.hoge-global.com/sub/contact/products/

--2017-10-04 20:08:29--  http://www.hoge-global.com/sub/contact/products/
www.hoge-global.com をDNSに問いあわせています... 192.168.11.27
www.hoge-global.com|192.168.11.27|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 400 Bad Request
2017-10-04 20:08:29 エラー 400: Bad Request。

400エラーが発生します。

# wget http://hoge_sub.fuel.local

--2017-10-04 19:46:28--  http://hoge_sub.fuel.local/
hoge_sub.fuel.localDNSに問いあわせています... 127.0.0.1
hoge_sub.fuel.local|127.0.0.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 400 Bad Request
2017-10-04 19:46:28 エラー 400: Bad Request


400エラーが発生します。

# wget http://hoge_sub.fuel.local/contact/products/

--2017-10-04 19:46:38--  http://hoge_sub.fuel.local/contact/products/
hoge_sub.fuel.localDNSに問いあわせています... 127.0.0.1
hoge_sub.fuel.local|127.0.0.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 400 Bad Request
2017-10-04 19:46:38 エラー 400: Bad Request

400エラーが発生します。

試したこと

  • Apache(2.2.15)とPHP(5.4)のバージョンを合わせています
  • 旧環境のApacheコンフィグ, WEBファイルをパスを合わせてそのまま再現

mod_proxyはインストールされている模様です。

# grep -e mod_proxy.so -e mod_proxy_ajp.so /etc/httpd/conf/*

/etc/httpd/conf/httpd.conf:LoadModule proxy_module modules/mod_proxy.so
/etc/httpd/conf/httpd.conf:LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
# apachectl -M

rewrite_module (shared)
 proxy_module (shared)
 proxy_balancer_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_ajp_module (shared)
 proxy_connect_module (shared)

補足情報(言語/FW/ツール等のバージョンなど)

  • Apache 2.2.15)
  • PHP 5.4.45
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

http://hoge_sub.fuel.local に直接アクセスして 400: Bad Request なのであれば、ProxyPass, ProxyPassReverse とは関係ないです。

suyama さんもご指摘の、以下に該当するものと思います。

ServerNameに"_"が含まれているとBad Requestになるという事例は聞きます。

ServerName 設定というよりも、リクエストの Host: ヘッダに「_」が含まれていることが原因です。

ServerName に「_」を含まないものに変更するか、HttpProtocolOptions で Strict(default)→Unsafe を設定するといいと思います。

<VirtualHost *:80>
    DocumentRoot /home/web/hoge_sub/app/public
    ServerName "hoge_sub.fuel.local"
    HttpProtocolOptions Unsafe LenientMethods Allow0.9
      (略)
</VirtualHost>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/05 09:25

    TaichiYanagiya様
    ご返信有難う御座います。

    >HttpProtocolOptions で Strict(default)→Unsafe を設定するといいと思います。
    こちらで解決致しました、
    誠に有難う御座います。

    現在システムが稼動してリリース出来ました!
    感謝です。

    キャンセル

0

vhosts.confの記載はこれですべてでしょうか。
<VirtualHost *:443>に対応する</VirtualHost>がないようです。

下記コマンドでは「Syntax OK」となるでしょうか。

apachectl configtest

また、提示された設定からは"/contact/customer"へはHTTPSでのアクセスのみとなるように思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/03 21:24

    Bad Requestが出る原因としては、不正なリクエストによるものですが、wgetで取得しているのであれば問題ないように思います。

    ServerNameに"_"が含まれているとBad Requestになるという事例は聞きます。
    また、mod_rewriteでループが発生していてもBad Requestと表示されるかと思います。

    キャンセル

  • 2017/10/03 23:06

    suyama様

    すごく丁寧なアドバイス誠に有難う御座います。
    拝承致しました。

    試しましたが、上手くいかず、
    旧環境ではドメイン等そのままで動いているので何ともです。

    有難う御座います。
    引き続き明日も確認致します。
    また自己解決した場合も詳細にフィードバック致します。

    本当に有難う御座います。

    キャンセル

  • 2017/10/05 09:27

    >suyama様

    >ServerNameに"_"が含まれているとBad Requestになるという事例は聞きます。
    こちらでした。
    アドバイスを実行できておらずすみません。
    ご尽力誠に有難う御座います。
    感謝しております。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る