使用 Nginx 作为反向代理服务器来进行 FileMaker 的 WebDirect 公开
首先
目标读者
-
- Claris FileMaker Server ( 以下 FMS ) で WebDirect を使っている/使おうとしている
-
- WebDirect の公開 URL を、 FMS に設定されているサブドメインとは別のものを指定したい
たとえば……
公開 URL https://xxxxxx.xxx/fmi/webd/
FMS に指定されているサブドメイン https://yyyyyy.yyy/fmi/webd/
FMS 稼働サーバの IP アドレスを知られるのは嫌
FMS 稼働サーバに直接アクセスされたくない
要做的事情 zuò de
- リバースプロキシサーバの用意
假设/条件/起因
-
- 既に 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
这个问题
准备反向代理服务器
准备证书
-
- 手元にある証明書
-
- もしくは Let’s Encrypt
いくつか、私の他記事で導入に関して書いているのでそちらご参照ください
JitsiMeetをUbuntu20.04にインストール~動作検証までしてみる
Ubuntu20.04でPrometheusを用いてリソースモニタリング(環境構築編)
安装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 へリダイレクトする
証明書は任意に指定
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 はファイアウォールです
いくつか、私の他記事で導入に関して書いているのでそちらご参照ください
JitsiMeetをUbuntu20.04にインストール~動作検証までしてみる
Ubuntu20.04でPrometheusを用いてリソースモニタリング(環境構築編)
コマンド
ufw allow 'Nginx Full'
确认访问
https://xxxxxx.xxx/fmi/webd/ へアクセスしたときに正しく表示されればよしです
最后
想法
- proxy_set_header X-Forwarded-Host を設定するとうまくいかなくなるというのが、ポイントでした。おそらく一度 IIS 側で受け取ったものをさらに FMS 側へ渡すという多段のかたちをとっているからなのではないか……? と推察されます。
2020年10月8日 补充说明
-
- 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; を追記しています。最終的には以下のように(本文記事内でも修正済)
参考記事 : Docker & Node.js & Socket.io & NGINXでよくあるエラー
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;
}