サーバのリプレイ系案件。
ProxyPassReverseでローカル定義先のアプリに400エラーで到達出来なかった。
コンフィグ、バージョンを合わせたのに動かない。
そして旧環境ではなぜか動いていて何がいけないのかわからなかった(現在も不明)、協力を得て期日にリリース対応できました。
もくじ
解決策
- _のあるホスト(ドメイン)を使わない。そもそもRFC違反
- ApacheのHttpProtocolOptions unsafeオプションを設定して、力技で回避する。
今回は2で解決した。
環境
- CentOS 6.8
- Apache 2.2.15
# 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 DirectoryIndex index.html index.html.var ↓変更 DirectoryIndex index.php index.html index.html.var
# mkdir -p /home/web/hoge-global/public # mkdir -p /home/web/hoge-global/app/public # mkdir -p /home/web/hoge-global/app/public/contact/products/ # mkdir -p /home/web/hoge_sub/app/public # 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 `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 `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 `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。 # wget http://hoge_sub.fuel.local --2017-10-04 19:46:28-- http://hoge_sub.fuel.local/ hoge_sub.fuel.local をDNSに問いあわせています... 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。 # wget http://hoge_sub.fuel.local/contact/products/ --2017-10-04 19:46:38-- http://hoge_sub.fuel.local/contact/products/ hoge_sub.fuel.local をDNSに問いあわせています... 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。
解決策
# vi /etc/httpd/conf.d/unsafe.conf HttpProtocolOptions unsafe
# httpd -t Syntax OK # service httpd restart
# wget http://www.hoge-global.com/sub/contact/products/ --2017-10-08 03:46:15-- 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 による接続要求を送信しました、応答を待っています... 200 OK 長さ: 56 `index.html.1' に保存中 100%[=================================================================================================================================>] 56 --.-K/s 時間 0s 2017-10-08 03:46:15 (26.0 MB/s) - `index.html.1' へ保存完了 [56/56] # wget http://hoge_sub.fuel.local/ --2017-10-08 03:46:45-- http://hoge_sub.fuel.local/ hoge_sub.fuel.local をDNSに問いあわせています... 127.0.0.1 hoge_sub.fuel.local|127.0.0.1|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 39 `index.html.3' に保存中 100%[=================================================================================================================================>] 39 --.-K/s 時間 0s 2017-10-08 03:46:45 (17.4 MB/s) - `index.html.3' へ保存完了 [39/39] # wget http://hoge_sub.fuel.local/contact/products/ --2017-10-08 03:46:27-- http://hoge_sub.fuel.local/contact/products/ hoge_sub.fuel.local をDNSに問いあわせています... 127.0.0.1 hoge_sub.fuel.local|127.0.0.1|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 56 `index.html.2' に保存中 100%[=================================================================================================================================>] 56 --.-K/s 時間 0s 2017-10-08 03:46:27 (27.0 MB/s) - `index.html.2' へ保存完了 [56/56]
到達した。