メモの日々


2019年09月13日(金) [長年日記]

[web][java] TomcatをApacheと連携させる方法

Tomcatの前段にリバースプロキシとしてApacheを配置し、Apache経由でTomcatにアクセスできるようにする方法を少し調べたのでメモ。試したバージョンはTomcat 8.5.39とApache 2.4.29。

リバースプロキシとして動作させるためにはApacheにモジュールを導入する必要があるが、その選択肢として次の3つがある。

モジュール名Apache~Tomcat間のプロトコルメモ
mod_proxy_httpHTTPApacheの同梱モジュールで導入は簡単
mod_proxy_ajpAJPApacheの同梱モジュールで導入はまあ簡単
mod_jkAJPTomcat側で開発されている。試してないけど上記モジュールよりは面倒そう

mod_proxy_httpを使う場合

TomcatはデフォルトでHTTPを受け付けるようになっているので、mod_proxy_httpを使う場合はApache側の設定だけで連携を実現できる。必要な設定はモジュールのロードと要求の転送設定で、次のような感じで指定する。

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

<IfModule mod_proxy.c>
    ProxyPass /test http://localhost:8080/app1
    ProxyPassReverse /test http://localhost:8080/app1
</IfModule>
  • mod_proxy_httpを動作させるにはmod_proxyも必要なのでそれもロードする。
  • ProxyPassが要求を転送するためのディレクティブ。
  • ProxyPassReverseはリダイレクト先を適切にマッピングするためのディレクティブ。
  • mod_proxyにはほかにも色々なディレクティブがあるので、必要に応じてそれらを使う。

mod_proxy_ajpを使う場合

mod_proxy_ajpを使うには、TomcatがAJPを受け付けるように設定する必要がある。server.xmlの中に

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

というような行があるので、これを生かす(コメントアウトを外す)ようにすればよい。

Apache側の設定はmod_proxy_httpと同様。ロードするモジュール、プロトコル名、ポート番号を変えればよい。

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so

<IfModule mod_proxy.c>
    ProxyPass /test ajp://localhost:8009/app1
    ProxyPassReverse /test ajp://localhost:8009/app1
</IfModule>

2019年09月12日(木) [長年日記]

[life] toto当せんした(5)

3か月ぶりに当せん。ペース早いが、当せん金はまた890円。100円BIG1119回の5等でした。


2019年09月03日(火) [長年日記]

[dev][hotwo] Githubでフォーク元に追従する

Githubでフォークしたリポジトリをフォーク元の最新に同期する方法について、Githubのヘルプにある方法をメモ。ヘルプは公式で翻訳されている。

フォーク元を登録

まず現状を確認。

$ git remote -v
origin  git@github.com:YOUR_USERNAME/YOUR_FORK.git (fetch)
origin  git@github.com:YOUR_USERNAME/YOUR_FORK.git (push)

まだフォーク元が登録されていないのなら、次を実行して登録する。upstreamという名前で登録している。

$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git

フォーク元の最新を取り込む

upstreamをローカルにfetchした後で、upstream/masterをmasterブランチにマージする。

$ git fetch upstream
$ git checkout master
$ git merge upstream/master

問題なければoriginにpushする。

$ git push origin HEAD

2019年08月30日(金) [長年日記]

[web] XML内にXHTML要素を書くとブラウザがHTMLとしてレンダリングしてしまう

XMLファイルをウェブブラウザで開くとそれなりにレンダリングしてくれて、簡易XMLビューワとして使える。

しかし、XML内にXHTMLの要素を含めるとHTMLとしてレンダリングされてしまうようだ。こうなるとXMLビューワとしては使えないので不便。

元々はブラウザで表示が変になるXMLがあるけど何故だろうと調べていて、次のコメントを見てHTMLとしてレンダリングされているのかと気づいた。

this declaration puts the parsers to the XHTML mode and handles the document as an XHTML document. The rendering results makes sense if browsers parsed the document as an XHTML.

以下にFirefox 68での例を示すが、Chrome 76やEdge 44、IE 11でも同様の振る舞いになる。表示モードを切り替えるスイッチがあるといいのだが、あったりするのだろうか?

通常のXMLのレンダリング

次のファイルを用意する。

<?xml version="1.0" encoding="UTF-8"?>
<kenichi xmlns:h="http://www.w3.org/1999/xhtml">
    <hello>こんにちは</hello>
</kenichi>

kenichi要素でXHTMLの名前空間を参照しているが、これは後に示すの例と比較するために書いているだけで本質的なものではない。

上のXMLをFirefoxで開くと、次のようにXML要素がツリー上に表示される。

XMLとしてレンダリングされている様子

XHTML要素を含むXMLのレンダリング

先の例に「<h:s>さようなら</h:s>」という行を追加した次のファイルを用意する。

<?xml version="1.0" encoding="UTF-8"?>
<kenichi xmlns:h="http://www.w3.org/1999/xhtml">
    <hello>こんにちは</hello>
    <h:s>さようなら</h:s>
</kenichi>

上のXMLをFirefoxで開くと、次のようにHTMLとして表示されてしまう。

HTMLとしてレンダリングされている様子


2019年08月29日(木) [長年日記]

[windows] net useコマンドで共有フォルダへの接続を制御

Windowsのnet.exeのuseサブコマンドを使ったのでメモ。ウェブ上にこのコマンドのリファレンスは無いのかな?

はじめにヘルプの先頭部分を引用しておく。

>net help use
このコマンドの構文は次のとおりです:

NET USE
[devicename | *] [\\computername\sharename[\volume] [password | *]]
        [/USER:[domainname\]username]
        [/USER:[dotted domain name\]username]
        [/USER:[username@dotted domain name]
        [/SMARTCARD]
        [/SAVECRED]
        [/REQUIREINTEGRITY]
        [/REQUIREPRIVACY]
        [/WRITETHROUGH]
        [[/DELETE] | [/PERSISTENT:{YES | NO}]]

NET USE {devicename | *} [password | *] /HOME

NET USE [/PERSISTENT:{YES | NO}]

NET USE は、コンピューターを共有リソースに接続したり、共有リソースから切断
したりします。オプションなしで使用した場合は、コンピューターの接続が一覧表示
されます。

接続状況の確認

>net use
新しい接続は記憶されます。


ステータス  ローカル名 リモート名                ネットワーク名

-------------------------------------------------------------------------------
OK                     \\192.0.2.20\test    Microsoft Windows Network
コマンドは正常に終了しました。

net useを引数なしで実行すると、現在接続している共有リソースの一覧が表示される。ただ、netコマンドではなくExplorerを使って接続した共有リソースは表示されないみたい。

最初に表示されている「新しい接続は記憶されます」というのは、最後に指定した /persistent オプションの値で、yesなら「記憶されます」、noなら「記憶されません」と表示される。

新しい接続

>net use \\192.0.2.21\test * /user:aaa /persistent:yes
\\192.0.2.21\test のパスワードを入力してください:
コマンドは正常に終了しました。

共有フォルダのパスを指定すると新しい接続を追加できる。このとき、ユーザ名とパスワードを指定でき、パスワードとして「*」を指定すると対話的にパスワードを入力できる。

また、/persistentオプションで接続を永続化するかどうかを指定できる。yesを指定すると次回のログイン時に接続が復元され、noだと復元されない。

切断

>net use \\192.0.2.21\test /delete
\\192.0.2.21\test が削除されました。

/deleteオプションを指定すると既存の接続を切断できる。