Rainbow Planet (GT×IT×SP×SA)

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

01_IT技術 (Technology)

TomcatのURLに付くポート番号8080を非表示にしてドメイン名のみでサイトにアクセスする方法と手順

投稿日:

本記事で実現したい事は下記2点、①URLのポート番号・アプリ名を非表示(リバプロ)と②JSP/Servlet名非表示(web.xml)です。これらを実現する事でブラウザにドメイン名のみ(例:XXXX.com)でウェブサイトにアクセス出来るようになります。

[対応前] http://[Your Domain]:8080/[Your App Name]/XYZ.jsp
[対応後] http://[Your Domain]/

(0) 目次

(1) 前提や実現方式など
 (1-1) 前提条件
 (1-2) 実現方式の概要
 (1-3) 両方の対応が必要な理由
(2) ページ名(JPSやServlet名)を省略入力可能にする対応
 (2-1) 実現方法(ウェルカムページ)
 (2-2) 設定の手順
  (2-2-1) デプロイメントディスクリプタ(web.xml)作成
  (2-2-2) ウェルカムページ定義コードの記述
  (2-2-3) Tomcatの再起動
(3) デフォルトポート番号8080非表示対応
 (3-1) 実現方法(Apacheリバプロ)
 (3-2) 設定の手順
  (3-2-1) リバースプロキシ用のモジュール確認
  (3-2-2) リバースプロキシ用のモジュール有効化
  (3-2-3) 仮想ホストの新規作成
  (3-2-4) 設定の反映(サービスの再起動)

(1) 前提や実現方式など

(1-1) 前提条件

・RHEL系OS(CentOS等)でrootでない一般ユーザを用意していること。
 →http://rainbow-engine.com/create-linux-user/
・Apacheがインストールされていること。
 →http://rainbow-engine.com/install-apache-centos7/

目次にもどる

(1-2) 実現方式の概要

第一段階としてウェルカムページの設定を行い、URLを指定する際にページ名(XXXX.jspなど)を省略できるようにします。
⇒2章で解説

第二段階として、Apacheのリバースプロキシを導入し、ポート号8080やアプリケーション名をURLに指定せずにアクセスできるようにします。つまりドメイン名のみ(例:XXXX.com)をブラウザに入力すればアクセスできるようになる)。
⇒3章で解説

この2つを対応すると次のようにドメインのみでアクセス出来るようになります。

[対応前] http://[Your Domain]:8080/[Your App Name]/XYZ.jsp
[対応後] http://[Your Domain]/

目次にもどる

(1-3) 両方の対応が必要な理由

仮にウェルカムページの設定をせず、リバースプロキシのみを設定した場合、jsp名を指定しないとウェブサイトにアクセス出来ないため、必然的にリバースプロキシの設定にjsp名を含んだフルURLを指定せざるを得なくなります。
その場合、最初の画面遷移はそれで問題ないのですが、別のページに遷移しようとするとURLの組み立てが不正になる事象が発生したため組合せての対応を提案しています(XXXX.jspYYYY.jspのような変なURLになってしまう)

(図131)
ウェルカムページを設定していないとリバプロにてjsp名まで指定のフルURLが必要となり画面遷移で失敗する。

目次にもどる

(2) ページ名(JPSやServlet名)を省略入力可能にする対応

(2-1) 実現方法(ウェルカムページ)

動的Webアプリ(ウェブサイト)のウェルカムページを設定する事で、ページ名(JPSやServlet名)を省略入力可能にします。

(図211)

下記例で例えばウェルカムページの名称が「XYZ.jsp」だとして、通常Tomcatで動くServlet/JSPのアプリは上段(対応前)の形式のURLを指定して呼び出しますが、それだとユーザーの負担となってまうため、ページ名は省略して呼び出せるようにすると、下段(対応後)のURLのような形でウェルカムページの表示が出来るようになります。

(例)

[対応前] http://[Your Domain]:8080/[Your App Name]/XYZ.jsp
[対応後] http://[Your Domain]:8080/[Your App Name]

ウェルカムページは具体的な設定方法として「デプロイメントディスクリプタ」の作成を行います。「デプロイメントディスクリプタ」は、あるコンテナ/エンジンにデプロイされているアプリケーションの設定ファイルを指す言葉です。ウェブアプリの場合はアプリのROOT配下の「WEB-INF」ディレクトリに「web.xml」で配置するという決まりがあります。

目次にもどる

(2-2) 設定の手順

(2-2-1) デプロイメントディスクリプタ(web.xml)作成

①ご自身のアプリ配下のWEB-INFフォルダを右クリック⇒New⇒Otherと選択
(図221)①

②「Wizards:」で「XML File」を探して選択し「web.xml」という名前で作成。
(図222)②

(2-2-2) ウェルカムページ定義コードの記述

作成したxmlファイルにウェルカムページを指定するための記述を行います。ウェルカムページは<welcom-file-list>タグの中に<welcome-file>タグを使って複数記述する事ができ、上に記述したものから優先されます。

(例)「TENLDNPG_LandingPage.jsp」ページをウェルカムページに指定しています

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <welcome-file-list>
    <welcome-file>TENLDNPG_LandingPage.jsp</welcome-file>
  </welcome-file-list>
</web-app>

(図222)

目次にもどる

(2-2-3) Tomcatの再起動

Tomcatを再起動して設定を反映させます。Eclipseの場合は下図のようにTomcatの部分を右クリックして「Start」を押下する事で起動します。
(図223)

目次にもどる

 

(3) デフォルトポート番号8080非表示対応

(3-1) 実現方法(Apacheリバプロ)

ウェルカムページの対応により、個別のjspページ名を指定せずにアクセスできるようになりました(対応前)。しかし、これでもポート番号(8080)やアプリケーション名([Your App Name])が残ってしまうためユーザーにとってはサイトに辿り着くのに負担が残ります。それを解決するためにApacheのリバースプロキシを導入すると、ドメイン名を入力するのみでサイトのウェルカムページに辿り着く事ができます(対応後)。

(例)

[対応前] http://[Your Domain]:8080/[Your App Name]
[対応後] http://[Your Domain]/

リバースプロキシとは、ウェブサーバの手前でクライアントからのリクエスト(要求)を転送するサーバで、セキュリティやパフォーマンス、信頼性の向上の目的で導入されます。

Apacheの仮想ホストを立てて、背後にある1つ以上のアプリケーションサーバの「リバースプロキシサーバ」として動作させます。今回は単一の仮想ホストを作成し、ネットワークのトラフィックを取得します。またHTTPとHTTPSの両方に対応させる場合、プロキシ設定はHTTPとHTTPSの両方に適用される必要があります。

(図311)①一般的なリバプロ

一般的なリバプロでは上記のように「リバースプロキシサーバ」1つに対して複数のアプリケーションサーバが背後に控えますが、今回はApacheとTomcatを同居させる事で、よりシンプルにしています。

(図311)②ApacheとTomcat同居の構成

目次にもどる

(3-2) 設定の手順

(3-2-1) リバースプロキシ用のモジュール確認

はじめにApacheのリバースプロキシ用のモジュールが有効になっているか?を確認します。

$ httpd -M

(図321)①

有効になっている事を確認するべきは下記4つのモジュールになります。

 proxy_module (shared)
 lbmethod_byrequests_module (shared)
 proxy_balancer_module (shared)
 proxy_http_module (shared)

(図321)②

(3-2-2) リバースプロキシ用のモジュール有効化

①設定ファイルの編集

もし上記のチェックにて有効化されていないモジュールがあった場合は、有効化を行います。「etc/httpd/conf.modules.d」配下にモジュールの有効化を制御する設定ファイルがあるため、それを編集していきます。リバースプロキシの場合は「00-proxy.conf」というファイルを設定します。

vi /etc/httpd/conf.modules.d/00-proxy.conf

(図322)①設定ファイルの場所

②モジュールの有効化

ファイルの中から該当するモジュールを探し、もしコメントアウト(#)されていたら解除して有効化します。

(図322)②モジュールの有効化

③設定の反映

設定ファイルを編集したら、サービスを再起動して変更の反映を行います。
$ sudo systemctl restart httpd

目次にもどる

(3-2-3) 仮想ホストの新規作成

リバプロに必要なApacheモジュールが確認できたら、次は仮想ホストの設定を行います。仮想ホストはApacheにおいて1つのサーバで複数のドメインを運用するための技術で、仮想サーバ単位にIPを割り当てたり、ドメインを割り当てたりしてウェブサイトをホストします。

今回はその技術を使ってリバースプロキシを実現します。仮想ホストは拡張子が「.conf」のファイルで定義する事ができ、「/etc/httpd/conf.d/」配下に新規に作成する事で読み込まれます。

①設定ファイルの作成

viエディタ等で新規に仮想ホストの設定ファイルを作成します。

$ sudo vi /etc/httpd/conf.d/[任意のファイル名].conf

(図323)①

②設定ファイルの編集

仮想ホストの設定雛形の中身として、リバースプロキシの設定記述を足していきます。

<VirtualHost *:80>
        ProxyPreserveHost On

        ProxyPass / http://tennis-database.com:8080/TennisDatabase/
        ProxyPassReverse / http://tennis-database.com:8080/TennisDatabase/
</VirtualHost>

(表)各設定項目の意味について

ProxyPreserveHost = [On/Off] ・この設定をONにするとApacheはリクエストが来た元のサーバのヘッダ情報?を、裏にあるAPサーバに渡します
ProxyPass / [My Application URL] ・リバースプロキシの設定そのもので、クライアントのリクエストに対して、それをどこに送るか?を定義しています(行き)。
・指定したURL配下の全て(ページや資源)に対してプロキシとして機能する事を意味します。
(例1)
・サイトのドメイン: http://sample.org/
・プロキシ設定: ProxyPass /test/hello/ http://test.com/
・ブラウザ入力URL: http://sample.org/test/hello/world
のような条件の場合、リクエストは内部的にはプロキシリクエストに変換され「http://test.com/world」となります。つまり「ProxyPass [アプリケーションパス] [リダイレクトするドメイン]」のような記述になっています。
ProxyPassReverse / [My Application URL] ・イメージとしては「戻り」のヘッダー修正。
・背後のサーバ⇒Apache⇒クライアントブラウザへのレスポンス(戻り)のヘッダを編集するための設定です。
・ApacheにHTTPリダイレクトレスポンスのLocationレスポンスヘッダを編集するように指示をしています。
・これにより、背後のサーバがロケーションヘッダ(リダイレクト指示)を返却した際に、背後のサーバへリダイレクトさせるのではなく、プロキシのアドレスにリダイレクトする事を保証します。
・例えばアプリが「localhost:8081」に配備されていたとして、ロケーションヘッダーには「http://localhost:8081/XXX/」のようなパスが記載され、Apacheがこれをブラウザに連携するが、ProxyPassReverseはそれをインターセプトし、Apacheのプロキシ設定に合うように書き換えします。
・基本的にはProxyPassと同じ設定にします。

(図323)②

目次にもどる

(3-2-4) 設定の反映(サービスの再起動)

サービスを再起動して設定を反映させます。

$ sudo systemctl restart httpd

(図324)

目次にもどる

(3-2-5) 疎通確認

ここまでの設定が完了すると、ドメイン名。/ホスト名/IPのみのURLを指定した際に、ApacheのWelcomePageの代わりに、Apacheの背後のサーバのページが応答するはずです。
疎通確認として実際にブラウザから「ドメイン名」のみを入力し、ウェブサイトが表示できるか?をチェックします。

(図325)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-01_IT技術 (Technology)

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

APサーバ(Java)⇒DBサーバ(OracleDB 11g)へJDBC接続する方法まとめ

(0)目次 (1) 前提条件 (2) JDBCドライバーのインストール  (2-1) JDBCドライバーをダウンロード  (2-2) APサーバにアップロード・解凍 (3) プログラムの実装  (3- …

パフォーマンスモニタでディスク(PhysicalDisk)監視する際の主なカウンターについて+具体的にどこをカウントしているのか?を図で表現してみた

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) CPUやメモリの解説について (2) ディスクの監視  (2-1) ディスクの主な監視項目  (2-2) ディスクのカウンター追 …

PythonにOpenCVを導入して画像を読込み&表示&拡大縮小してみる

(0)目次&概説 (1) OpenCVとは (2) OpenCVのインストール  (2-1) インストール資源の入手  (2-2) インストール時の注意事項  (2-3) インストールの実行 (3) …

Linuxサーバ(CentOS6)にOracleDB11gをインストールする(その2)

目次 (4)インストーラの進行  (4-1)セキュリティUpdate構成  (4-2)インストールオプション選択  (4-3)Gridインストールオプション  (4-4)製品言語の選択  (4-5)デ …

Oracleデータベースのバックアップをexpdpで取得する方法

(0)目次&概説 (1) expdp/impdpについて  (1-1) expdp/impdpの概要  (1-2) expdp/impdpの配置場所や転送方法 (2) エクスポート手順(expdp) …

  • English (United States)
  • 日本語
Top