LoginSignup
5
5

More than 3 years have passed since last update.

FileMakerのWebDirect公開をnginxでリバースプロキシ

Last updated at Posted at 2020-10-06

はじめに

対象読者

  • Claris FileMaker Server ( 以下 FMS ) で WebDirect を使っている/使おうとしている
  • WebDirect の公開 URL を、 FMS に設定されているサブドメインとは別のものを指定したい
  • FMS 稼働サーバの IP アドレスを知られるのは嫌
  • FMS 稼働サーバに直接アクセスされたくない

やること

  • リバースプロキシサーバの用意

前提

  • 既に FMS に指定されているサブドメイン https://yyyyyy.yyy/fmi/webd/ へアクセスできること
  • FMS 側のファイアウォールで接続元 IP を制限している
  • FMS 側でクライアント接続元 IP が取得できなくてもかまわない

環境

リバースプロキシサーバ

  • OS は Ubuntu 20.04 を想定
    • 他の Linux ディストリビューションをお使いの場合、必要に応じて apt コマンドを読み替えてください

FMS サーバ

  • OS は Windows Server 2016 以上を想定
    • 試行した環境は 2016 ですが 2019 でも問題ないと思われる
  • FMS の ver. は 17 以上を想定
    • 試行した環境は 17 と 19

本題

リバースプロキシサーバの用意

証明書の準備

nginx のインストール

  • コマンド
apt install nginx

nginx の設定

  • /etc/nginx/sites-available/default に記述
    • FileMaker Server を xxxxxx.xxx で、リバースプロキシサーバを yyyyyy.yyy とする
    • upstream の名前を filemakerserver-webdirect-upstream とする
      • upstream ディレクティブの server はサブドメインより IP address を直接指定してあげた方が nginx のパフォーマンスは高くなるけれど、ここではひとまず分かりやすくサブドメインを指定しておく
    • 80 port でアクセスされたら強制的に 443 port へリダイレクトする
    • 証明書は任意に指定
/etc/nginx/sites-available/default
upstream filemakerserver-webdirect-upstream {
  server xxxxxx.xxx:443;
}

server {
  listen 80;
  server_name yyyyyy.yyy;

  if ($host = yyyyyy.yyy) {
    return 301 https://$host$request_uri;
  }

  return 404;
}

server {
  listen 443 http2 ssl;
  server_name yyyyyy.yyy;

  location / {
    try_files $uri @filemakerserver-webdirect-upstream;
  }

  location @filemakerserver-webdirect-upstream {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cache_bypass $http_upgrade;
    proxy_pass https://filemakerserver-webdirect-upstream;
  }

  ssl_certificate /etc/letsencrypt/live/yyyyyy.yyy/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/yyyyyy.yyy/privkey.pem;
}

nginx リロード

  • コマンド
nginx -s reload

ufw で nginx へのアクセスを通す設定

ufw allow 'Nginx Full'

アクセス確認

image.png

おわりに

感想

  • proxy_set_header X-Forwarded-Host を設定するとうまくいかなくなるというのが、ポイントでした。おそらく一度 IIS 側で受け取ったものをさらに FMS 側へ渡すという多段のかたちをとっているからなのではないか……? と推察されます。

2020/10/08 追記

  • FileMaker Server 19 でも動作確認しました。FMS 17 では出なかった failed: Error during WebSocket handshake: Unexpected response code: 501 エラーが出るようになりました。
  • これへの対応として nginx の以下 location 内に proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_cache_bypass $http_upgrade; を追記しています。最終的には以下のように(本文記事内でも修正済)
  location @filemakerserver-webdirect-upstream {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cache_bypass $http_upgrade;
    proxy_pass https://filemakerserver-webdirect-upstream;
  }
5
5
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
5
5