0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ConfluenceとJiraをnode.jsで作った簡易プロキシの後ろで動かす

Last updated at Posted at 2019-10-01

JiraとConfluence、Node.js上で動作するWebアプリを同一PC上で動作させようとすると、CORSの問題でREST APIにアクセスできない。ローカルで動作確認するために動かすだけなら、Node.jsで簡単なプロキシサーバを作ることで対応することができるので、その設定方法をまとめる。(それ以前に、サーバ側の設定を変えればよいという話もあるが…本番環境に似せたいので)

#設定したいこと
同一PC上でJiraとConfluenceがlocalhostの別々のポートで稼働しているときに、プロキシにより、同じポート(ここでは10000)以下の/jira/confluenceでアクセスできるようにする。なおConfluenceの同時編集で使われるSynchronyという機能については設定しなくても特に問題なかった。(プロキシを介さなくても良いから?)
image.png

アプリ 元々のURL Context Path変更後 プロキシ経由のURL
Jira http://localhost:10080 http://localhost:10080/jira http://localhost:10000/jira
Confluence http://localhost:8090 http://localhost:8090/confluence http://localhost:10000/confluence

Confluenceの設定

AtlassianのConfluenceサポートに「NGINX を使用して Confluence へのリクエストをプロキシする方法」という記事に設定すべきことが載っている。なお、Jira/Confluence/Node.jsが同一PC上で動作し、PC外部からのリクエストが無ければ、「リダイレクション用URLの設定」はしない。

Context Pathの設定

<ConfluenceInstallDirectory>/conf/server.xmlを開き、Contextパスを設定する。

server.xml変更前
<Context path="" docBase="../confluence" debug="0" reloadable="false">

デフォルトでは""になっているところに、/confluenceを入力することで、http://localhost:8090/confluenceでアクセスできるようになる。

server.xml変更後
<Context path="/confluence" docBase="../confluence" debug="0" reloadable="false">

この設定をしないと表示がおかしくなる

この設定をせずにプロキシ経由localhost:10000でConfluenceにアクセスすると、正しく表示されない。これはConfluenceではCSSや各種リンクをベースURL(localhost:10000)を基準にしてしまうため。image.png

Jiraの設定

Confluenceと同様、Context Pathの設定を行う。

Context Pathの設定

<JiraInstallDirectory>/conf/server.xmlを開き、Contextパスを設定する。

server.xml変更前
<Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false" useHttpOnly="true">

デフォルトでは""になっているところに、/jiraを入力することで、http://localhost:10080/jiraでアクセスできるようになる。

server.xml変更後
<Context path="/jira" docBase="${catalina.home}/atlassian-jira" reloadable="false" useHttpOnly="true">

#簡単なプロキシを作る
localhost:10000へのリクエストを、JiraとConfluenceに振り分けるプロキシは、以下の2つのパッケージのサンプルを真似て作れた。(エラーやセキュリティは考えていないが、とりあえず動く)

index.js
const http = require('http');
const httpProxy = require('http-proxy');
const HttpProxyRules = require('http-proxy-rules');
const port = 10000;

// https://github.com/donasaur/http-proxy-rules
const rules = new HttpProxyRules( {
  rules: {
    '/jira(/?.*)$'       : 'http://localhost:10080/jira$1',
    '/confluence(/?.*)$' : 'http://localhost:8090/confluence$1'
  }
} );

const proxy = httpProxy.createProxy();
proxy.on('error', function (err, req, res) {
  res.writeHead( 500, { 'Content-Type': 'text/plain' } );
  res.end(err);
});

http.createServer( ( req, res) => {
  // 対応するURLがあるか調べる
  const target = rules.match( req );
  if( target ) {
    // マッチしたらリクエストを出す
    return proxy.web( req, res, { target: target } );
  }
  
  // no match found
  res.writeHead( 500, { 'Content-Type': 'text/plain' } );
  res.end( "Requested Url didn't match any of the listed rules.");
} ).listen( port );

console.log( `Proxy is listening on port ${port}.`);

process.on('SIGINT', () => {
  console.log( 'Proxy closed.' );
  httpProxy.close();
});

#動作確認
node index.jsで簡易プロキシを起動し、localhost:10000/confluencelocalhost:10000/jiraにアクセスすると、ConfluenceとJiraの画面が表示されることが確認できた。
image.png

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?