masalibの日記

システム開発、運用と猫の写真ブログです

外部ポートと内部ポートが違う場合の注意点

外部ポートとは
インターネットからのアクセスで
はてなBlogの場合はhttpなのでport:80になります


内部ポートとは
インターネット上ではないサーバーのポートです
例えば社内サーバーとかロードバランサ配下が該当します

f:id:masalib:20150821181451j:plain

問題の事象

負荷分散などをおこなっていると
外部ポートと内部ポートがちがう場合があります


外部ポート
 http://XXXXX.com/
内部ポート
 http://192.168.1.111:8081/

このような環境の場合にトレイリングスラッシュ(URLの末尾に付ける「/」のこと)
なしのリダイレクトが発生するとpotr付きのURLにリダイレクトされてしまいます


 http://XXXXX.com/test
 http://XXXXX.com:8081/test


なお現象は、8081のポートを外部ポートとして
うけるようにしていない場合、ログに残らないです
(せめてリダイレクト元のログが残ってくれれば気がついたのですが)

原因

受け取ったport(内部では8081)を
使用してリダイレクトしている

対応

WEBサーバーの種類によってことなります

apacheの場合

httpd.confのVirtualHostに
ServerNameを追加する

 <virtualhost *:8081="">
  DocumentRoot "/var/www/XXXXX_wwwroot"
  ServerName http://masalib.com:80 ←※追加
   ・
   ・
   ・
 </virtualhost>
nginxの場合
server {
      port_in_redirect off;
}

所管

5年間ぐらいapacheなどを触っているが
トレイリングスラッシュ(URLの末尾に付ける「/」のこと)
のあり、なしで動きがちがう事を知らなかった

ログに残らないなんて
気がつかねーーーーよ!!!

参考サイト
hogem.hatenablog.com