タグ: URL Rewrite

IISからWiki.jsにリーバスプロキシするメモ

とある事情から自宅サーバ環境下にWiki.jsを構築し、IISからリバースプロキシでアクセスするようにした。その際、トラブルでド嵌りしたのでメモ。

構成

IIS側

  • Windows Server 2012 R2
  • IIS 8.5

Wiki.js側

  • Ubuntu Server 18.04.3 LTS
  • node server (port: 3000)

症状

GitHub Authenticationを各種情報を設定の上有効化し、ログインからGitHubボタンを押すとリダイレクトが発生、この際正しいURLにリダイレクトされず404になる。
具体的には、リダイレクト先のURLに以下の違いが発生する。

https://github.com/login/oauth/authorize?response_type=code&redirect_uri=...
https://wiki.taiha.net/login/oauth/authorize?response_type=code&redirect_uri=...

本来URLのドメインはgithub.comになるが、何故かWikiのドメインが使用されてしまう。なお、Wiki.js側のローカルIPアドレスでアクセスした状態からリダイレクトを発生させた場合、正しくGitHubのログインへリダイレクトされた。このため、IISが原因であることが予想された。

どこを探しても対処法が見つからず、またいくつかそれらしき症状が報告されている質問はあるにはあったものの、いずれも回答が付いていなかった。
例:

対処

検索しつつ色々なサイトをボーっと眺めていると、 preserveHostHeader というのを見かけた。ただしこれ自体はログへの記録方法を設定するものであり、無関係。しかし構成エディタで同じ階層を眺めていると、 reverseRewriteHostInResponseHeaders なる項目を見つけた。検索してみると情報は少ないものの、どうもホスト名の書き換えに関わっている様に思え、デフォルトの True から False へ変更してみたところビンゴ。GitHubへのリダイレクトが正常に行われるようになった。

2019/11/07 追記: IIS Managerのサーバホーム(各バーチャルホストではない)-> “Application Request Routing Cache” -> “Server Proxy Settings…” -> “Reverse rewrite host in response headers” でも設定できた。

その他

メインのブログに置いている “ルータ関連メモ” 等非時系列的なコンテンツは、そのうち今回構築したWikiへの移行を考えています。

URL Rewrite UAブロック

サーバ全体に設定した (C:\Windows\System32\inetsrv\config\applicationHost.config)

<rewrite>
  <globalRules>
    <rule name="BotBlocking" enabled="true" stopProcessing="true">
      <match url=".*" />
      <condtions logicalGrouping="MatchAny">
        <add input="{HTTP_USER_AGENT}" pattern="^.*AhrefsBot/[0-9]\.[0-9];.*" />
        <add input="{HTTP_USER_AGENT}" pattern="^.*DotBot/[0-9]\.[0-9];.*" />
      </conditions>
      <action type="AbortRequest" />
    </rule>
  </globalRules>
</rewrite>