本記事で実現したい事は下記2点、①URLのポート番号・アプリ名を非表示(リバプロ)と②JSP/Servlet名非表示(web.xml)です。これらを実現する事でブラウザにドメイン名のみ(例:XXXX.com)でウェブサイトにアクセス出来るようになります。
[対応前] http://[Your Domain]:8080/[Your App Name]/XYZ.jsp [対応後] http://[Your Domain]/
<目次>
(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) Apacheのリバースプロキシ設定手順
(1) 前提や実現方式など
(1-1) 前提条件
(前提事項)
⓪RHEL系OS(CentOS等)でrootでない一般ユーザを用意していること。
→https://rainbow-engine.com/create-linux-user/
①HTML、JSP/Servlet等でホームページを作成済み
(例:「http://[ホスト名]:[ポート番号]/[アプリ名]/[画面名].jsp」のURL形式で自身のサイトにアクセスできる)
②ドメインを取得してDNSサーバとの紐づけ済み
(例:「http://[ドメイン]:[ポート番号]/[アプリ名]/」のURL形式で自身のサイトにアクセスできる)
→https://rainbow-engine.com/register-apply-owndomain/
③Apacheのインストールが完了している
・Apacheがインストールされていること。
→https://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]/
リバースプロキシとは、ウェブサーバの手前でクライアントからのリクエスト(要求)を転送するサーバで、セキュリティやパフォーマンス、信頼性の向上の目的で導入されます。
一般的なリバプロでは上記のように「リバースプロキシサーバ」1つに対して複数のアプリケーションサーバが背後に控えますが、今回はApacheとTomcatを同居させる事で、よりシンプルにしています。
(図311)②ApacheとTomcat同居の構成
(3-2) Apacheのリバースプロキシ設定手順
※リバースプロキシの設定手順は、長くなるため別記事に切り出しました。
(手順)Apacheのリバースプロキシ設定手順
https://rainbow-engine.com/apache-reverseproxy-howto/