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

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

ただいまの
回答率

91.03%

  • PHP

    17714questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Apache

    1567questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • FuelPHP

    491questions

    FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 263

youko

score 7

前提・実現したいこと

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

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 20:32

    suyama様
    ご返信誠に有難う御座います!
    一人で悩んでいるので大変ありがたいです。

    アドバイス頂いた、追加情報を載せます。


    # apachectl configtest
    Syntax OK


    失礼致しました。
    80番の設定もあります。

    # wget http://www.hoge-front.com

    --2017-10-03 20:28:37-- http://www.hoge-front.com/
    Resolving www.hoge-front.com... 127.0.0.1
    Connecting to www.hoge-front.com|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 301 Moved Permanently
    Location: https://www.hoge-front.com/ [following]
    --2017-10-03 20:28:37-- https://www.hoge-front.com/
    Connecting to www.hoge-front.com|127.0.0.1|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: unspecified [text/html]
    Saving to: “index.html”

    [ <=> ] 24,720 --.-K/s in 0.1s

    2017-10-03 20:28:39 (186 KB/s) - “index.html” saved [24720]

    正常動作しています。

    キャンセル

  • 2017/10/03 20:37

    後だしで失礼致します。

    </virturalhost>の記述はあります。
    https://hoge-front.com/にはアクセス出来ます。


    hoge-front.comはWordPress,

    subにFuelPHPのお問い合わせアプリがあります。/sub/contact/customer

    キャンセル

  • 2017/10/03 20:37

    設定は問題ないということですね。
    あとは、ProxyPassやProxyPassReverseの記載が違うように思いました。
    下記のようになるのではないかと思うのですが、元のコンフィグでも同様なのでしょうか。

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

    キャンセル

  • 2017/10/03 20:42

    失礼しました。
    Locationでは書き方が違うのですね。

    キャンセル

  • 2017/10/03 20:48 編集

    あとは、新環境でProxy先である「http://hoge-global.fuel.local/contact/customer」を直接参照した場合はどうなるかでしょうか。

    ProxyPassの設定に起因するものであれば、エラーログにもなんらかの出力があるように思います。

    キャンセル

  • 2017/10/03 20:48

    suyama様
    アドバイス、ご返信有難う御座います。

    度々修正失礼致します。
    こちらが正しい記述です。
    何度も修正して申し訳ありません。

    <Location "/sub/contact/customer">
    ProxyPass http://hoge.fuel.local/contact/customer
    ProxyPassReverse http://hoge.fuel.local/contact/customer
    </Location>

    キャンセル

  • 2017/10/03 21:07

    suyama様

    直接参照する場合も、400が出てしまいます。


    # wget http://hoge.fuel.local/contact/customer

    --2017-10-03 21:04:17-- http://hoge_fr.fuel.local/contact/customer
    Resolving hoge.fuel.local... 127.0.0.1
    Connecting to hoge.fuel.local|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 400 Bad Request
    2017-10-03 21:04:17 ERROR 400: Bad Request


    # wget http://hoge.fuel.local
    --2017-10-03 21:03:39-- http://hoge.fuel.local/
    Resolving hoge.fuel.local... 127.0.0.1
    Connecting to hoge.fuel.local|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 400 Bad Request
    2017-10-03 21:03:39 ERROR 400: Bad Request.

    有難う御座います。
    何でいけないのか。

    キャンセル

  • 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で質問しよう!

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

関連した質問

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

  • PHP

    17714questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Apache

    1567questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • FuelPHP

    491questions

    FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。