はじめに
前書き
- 本記事は FileMaker Advent Calendar 2022 21 日目の記事です。
対象読者
- Claris FileMaker Server で nginx を運用している人
前提
- FileMaker Server は 19.5.1 より apache に代わって nginx がデフォルトの Web サーバとして採用されるようになりました
- この nginx チューニングでパフォーマンスに影響ある範囲は、以下くらいだと思います
- AdminConsole
- WebDirect
環境
- FileMaker Server 19.6.2
- Ubuntu 20.04
FileMaker Server に依存した nginx についての事前調査
対象ディレクトリ
- 通常、nginx そのもののディレクトリは以下にあり、設定ファイルもその配下にあるものなのですが……
/etc/nginx/
- FileMaker Server では、設定ファイルを独自に有しており、以下に置かれてあります
/opt/FileMaker/FileMaker Server/NginxServer/
- とりわけ以下のファイルです
/opt/FileMaker/FileMaker Server/NginxServer/conf/fms_nginx.conf
設定ファイルの中身を見る
- 他にも 3 つのファイルがあり、合計で 4 ファイル、それぞれの中身を見てみましょう
fms_fac.conf
- ファイル名アルファベット昇順で、まず上から 1 つめ
- いきなり
FAC
とか出てきましたが、何でしょうねコレ……ってなりますよね - おそらく
FileMaker Admin Console
の略なんじゃないかな……と思います、設定としてproxy_pass
を見る限り - FileMaker Server の AdminConsole がポート
443
で受け付けられるように設定変更されたわけですが、ここの設定で16001
へ投げているわけですね - このファイルについては弄る必要はないです
fms_fac.conf
# Claris FAC nginx conf for https
location ^~ /admin-console {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16001/admin-console;
proxy_set_header Host $host;
}
location ^~ /fmi/admin/ {
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16001/fmi/admin/;
}
location ^~ /socket.io/ {
proxy_pass http://127.0.0.1:16001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
}
location / {
# we try to look in the root first, then fall back to FAC proxy
try_files $uri $uri/ @backend;
}
location @backend {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:16001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
fms_http.conf
- 2 つめ
- こちらは
http
関連全般……ということで、FileMaker Server の管理画面まわりのリバースプロキシ設定であったり、http でアクセスされたものに対し https で返すようにしたり、といったことが書かれていました - こちらもチューニングとして弄る必要はないですね
- ちなみに
mwpe
というのはMultiple Web Publishing Engine
の略だそうです
fms_http.conf
# Claris nginx http conf for port 80
index index.html index.htm index.nginx-debian.html;
# ideally all port 80 traffic should redirected to https
# Customer with custom cert (not self sign cert) can enable this
# return 301 https://$server_name$request_uri;
## below config from httpd httpd-rewrite conversion
location ^~ /Streaming/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/Streaming/;
}
location ^~ /Streaming_SSL/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/Streaming_SSL/;
}
location ^~/fmws {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/fmws;
}
location ^~ /docws {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/docws/;
}
location ^~ /oAuth {
rewrite ^/oAuth* https://$host:443$request_uri redirect;
}
location ^~ /admin-console {
rewrite ^/admin-console https://$host:443$request_uri redirect;
}
location ^~ /test {
rewrite ^/test https://$host:443$request_uri redirect;
}
location ^~ /fmi/rest {
rewrite ^/fmi/rest/* https://$host:443$request_uri redirect;
}
location ^~ /fmi/webd/PUSH {
proxy_pass "http://127.0.0.1:16021/fmi/webd/PUSH";
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
}
# mwpe
location ^~ /fmi/mwpem/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16002/fmswpem/;
proxy_http_version 1.1;
}
location ^~ /fmi/mwpew/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16002/fmswpew/;
proxy_http_version 1.1;
}
location ^~ /fmi/ {
proxy_set_header X-Forwarded-Proto http; # MWPE need this for redirect
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16021/fmi/;
proxy_http_version 1.1;
proxy_cookie_path /fmi "/; HttpOnly; Max-Age=43200";
}
fms_https.conf
- 3 つめは、解説不要なくらいシンプルですね
- こちらも弄る必要はないです
fms_https.conf
# Claris nginx https conf for port 80
return 301 https://$host$request_uri;
fms_nginx.conf
- というわけで本命の 4 つめですが……正直ちょっと、一つのファイルに設定盛り込みすぎ!! って感じです
- チューニングのために弄る必要があるファイルはここなのですが、ここを直接書き換えるのは気が引けてきますので、別ファイルに切り分けるようにしてみましょう
- ひとまず中身はこんな感じです、ということでまずは全部貼っておきます
- この中を読んでいくと、上記 3 つの .conf ファイルについては、このファイルの中で include として読み込んでいることがわかります
fms_nginx.conf
# Claris nginx conf
user fmserver fmsadmin;
worker_processes 5; ## Default: 1
events {
worker_connections 4096; ## Default: 1024
}
http {
include "/etc/nginx/mime.types";
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# hide nginx version
server_tokens off;
# Set website folder
root "/opt/FileMaker/FileMaker Server/NginxServer/htdocs/httpsRoot";
access_log "/opt/FileMaker/FileMaker Server/NginxServer/logs/access.log"; # this can be set 'off' to improve performance
error_log "/opt/FileMaker/FileMaker Server/NginxServer/logs/error.log";
# Enable SSL
ssl_certificate "/opt/FileMaker/FileMaker Server/CStore/serverCustom.pem";
ssl_certificate_key "/opt/FileMaker/FileMaker Server/CStore/serverKey.pem";
ssl_password_file "/opt/FileMaker/FileMaker Server/CStore/.passphrase";
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:!DH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
# Optimize session cache
ssl_session_cache shared:SSL:40m;
ssl_session_timeout 4h;
# Enable session tickets
ssl_session_tickets on;
# Admin can enable gzip compression if needed
# compression
# gunzip on;
# gzip on;
# Compress all the following MIME-types.
# gzip_types
# application/atom+xml
# application/geo+json
# application/javascript
# application/x-javascript
# application/json
# application/ld+json
# application/manifest+json
# application/rdf+xml
# application/rss+xml
# application/vnd.ms-fontobject
# application/wasm
# application/x-web-app-manifest+json
# application/xhtml+xml
# application/xml
# font/eot
# font/otf
# font/ttf
# image/bmp
# image/svg+xml
# image/gif
# image/jpeg
# image/png
# image/tiff
# image/webp
# image/x-icon
# video/3gpp
# video/avi
# video/mp4
# video/mpeg
# video/ogg
# video/quicktime
# video/webm
# text/cache-manifest
# text/calendar
# text/css
# text/javascript
# text/markdown
# text/plain
# text/xml
# text/vcard
# text/vnd.rim.location.xloc
# text/vtt
# text/x-component
# text/x-cross-domain-policy;
# gzip_proxied no-cache no-store private expired auth;
# gzip_min_length 1000;
# set payload limit
# currently, we have no limit. Admin can set to 20G, 200M or any value based on business spec
client_max_body_size 0;
proxy_request_buffering off; # we dont wait until the whole request is completed
charset utf-8;
source_charset utf-8;
server {
listen 80;
# Add headers for Cross-Origin Resource Sharing (CORS) policies
add_header 'Access-Control-Allow-Origin' $hostname;
add_header 'Access-Control-Allow-Credentials' 'True';
add_header 'Access-Control-Allow-Headers' 'Content-Type,Authorization';
## http conf based on cert
include "/opt/FileMaker/FileMaker Server/NginxServer/conf/fms_https.conf"; # HTTP conf
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
index index.html index.htm index.nginx-debian.html;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Prevent Clickjacking attack
add_header X-Frame-Options "SAMEORIGIN";
# Prevent cross-site scripting (XSS) attack
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
# add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval';" always;
# Add headers for Cross-Origin Resource Sharing (CORS) policies
add_header 'Access-Control-Allow-Origin' $hostname;
add_header 'Access-Control-Allow-Credentials' 'True';
add_header 'Access-Control-Allow-Headers' 'Content-Type,Authorization';
## below config from httpd mod_proxy conversion
location ^~ /fmi/fmwd_help/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16021/fmi/fmwd_help/;
proxy_set_header Host $host;
}
location ^~ /fmi/conf {
deny all;
return 403;
}
## Support XML on Linux on premise
# location ^~ /fmi/xml {
# deny all;
# return 403;
# }
## FAC admin console
include "/opt/FileMaker/FileMaker Server/NginxServer/conf/fms_fac.conf";
## below config from httpd httpd-proxy conversion
location ^~ /fmws {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/fmws;
proxy_set_header Host $host;
}
location ^~ /docws {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/docws;
proxy_set_header Host $host;
}
location ^~ /hss/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/hss/;
}
location ^~ /Streaming/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/Streaming/;
}
location ^~ /Streaming_SSL/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/Streaming_SSL/;
}
location ^~ /oauth/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:1895/oauth/;
}
location ^~ /fmds/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16005/fmds/;
}
location ^~ /admin-server/adminhelper {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16001/admin-server/adminhelper;
}
location ^~ /fmi/data/ {
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3000/fmi/data/;
}
location ^~ /fmi/odata/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3001/fmi/odata/;
}
## below config from httpd httpd-proxy-fmiwebd conversion
location ^~ /fmi/webd/PUSH {
proxy_pass "http://127.0.0.1:16021/fmi/webd/PUSH";
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
}
# mwpe
location ^~ /fmi/mwpem/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16002/fmswpem/;
proxy_http_version 1.1;
}
location ^~ /fmi/mwpew/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16002/fmswpew/;
proxy_http_version 1.1;
}
location ^~ /fmi/ {
proxy_set_header X-Forwarded-Proto https; # MWPE need this for redirect
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:16021/fmi/;
proxy_http_version 1.1;
proxy_set_header Connection "";
# Set cookie expiration date (12 hours in seconds), path and httponly
proxy_cookie_path /fmi "/; Secure; HttpOnly; Max-Age=43200";
}
# location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
# }
}
}
- ただ、実際のチューニングに入る前に、この設定ファイルをどこから呼び出しているのかなども、知っておきたいですよね
- ということで、もう少し周辺情報を洗っておきます
nginx の起動/停止/再起動
nginx の起動/停止
- FileMaker Server に依存している nginx の起動や停止などは、通常の
nginx
コマンドとは異なるものとなっています - これらについてどこで定義されているかというと、以下に配置されている各ファイルです
/opt/FileMaker/etc/systemd/system/
- たとえば
com.filemaker.nginx.start.service
ファイルの中身を見てみますと、以下のように記述されています - この中で、先ほど見ていた
fms_nginx.conf
を設定ファイルとして用いる旨が書かれていますね
com.filemaker.nginx.start.service
[Unit]
Description= Filemaker.com monitor system and start Nginx Server
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/sbin/nginx -c "/opt/FileMaker/FileMaker Server/NginxServer/conf/fms_nginx.conf"
[Install]
#WantedBy=multi-user.target
- この service ファイルによって、FileMaker Server が独自に用意した専用の nginx サービスがシステムに登録されることになるのですが、これが正しく稼働しているかどうかを確認するためには、以下のコマンドを打ちます
systemctl status com.filemaker.nginx.start
- ファイル名の最後の拡張子
.service
を除いたものになりますね - これを打つと、以下のように返ってくるはずです
- 同じようにして
restart
やstop
のサービスも登録されています-
start
と異なり、この 2 つは常時 active になるようなものではないですね
-
- ……で、nginx の起動状態が異常時であると、以下のように赤表示となります
- わざと異常を起こしたわけですが、
start
が正常稼働している状態でsystemctl start com.filemaker.nginx.start
などとすると、こうなります
- わざと異常を起こしたわけですが、
- 上記のようになってしまって nginx プロセスがダウンすると、以下のような
fmsadmin
コマンドでは復旧されなくなってしまいます
fmsadmin restart adminserver
fmsadmin restart server
fmsadmin restart wpe
-
fmsadmin help restart
コマンドで出てくる再起動対象は以下とのこと。それっぽいのが見当たらない
Description:
Restarts the server or process(es) of specified TYPE. This command stops
the server or process TYPE and then starts it after a short delay.
Valid server TYPEs:
ADMINSERVER Stops then starts the Admin Server.
SERVER Stops then starts the Database Server.
Valid process TYPEs:
FMSE Restarts the FileMaker Script Engine process.
FMSIB Restarts the Server Progressive Backup process.
XDBC Restarts the ODBC/JDBC listener process.
WPE Restarts all Web Publishing processes.
FMDAPI Restarts all FileMaker Data API processes.
ODATA Restarts the OData process.
- ということで、この状態に陥ってしまったら、おとなしく OS 再起動するしかありませんでした……
- 他に解決法を見つけられた方いらしたら教えてください🙏
nginx の再起動について試行錯誤
- さて、 nginx の設定ファイルを書き換えた後は、nginx の再起動あるいは設定再読込が必要になるわけですが、どうしたらよいのかって話ですよね……
- なお、通常の nginx であれば、シンプルに以下のコマンドで設定再読込をしてもらえますが、今回は別プロセスなので意味がありません
nginx -s reload
- OS ごと再起動すればもちろん nginx の設定が再度読み込まれるわけですが、都度そんなことやってられんわーです
-
systemctl start com.filemaker.nginx.restart
で再起動できるんじゃない? と思って試してみても、上記と同様でプロセスがお亡くなりになります
- 何が起きているのかもう少し調べてみたいわけですが
journalctl -u com.filemaker.nginx.start
で確認しても、大した情報は出てこない……
Dec 22 16:16:27 ubuntu-fms systemd[1]: Starting Filemaker.com monitor system and start Nginx Server...
Dec 22 16:16:27 ubuntu-fms systemd[1]: Started Filemaker.com monitor system and start Nginx Server.
Dec 22 17:23:20 ubuntu-fms systemd[1]: Stopping Filemaker.com monitor system and start Nginx Server...
Dec 22 17:23:20 ubuntu-fms systemd[1]: com.filemaker.nginx.start.service: Succeeded.
Dec 22 17:23:20 ubuntu-fms systemd[1]: Stopped Filemaker.com monitor system and start Nginx Server.
Dec 22 17:23:20 ubuntu-fms systemd[1]: Starting Filemaker.com monitor system and start Nginx Server...
Dec 22 17:24:51 ubuntu-fms systemd[1]: com.filemaker.nginx.start.service: start operation timed out. Term>
Dec 22 17:24:51 ubuntu-fms systemd[1]: com.filemaker.nginx.start.service: Failed with result 'timeout'.
Dec 22 17:24:51 ubuntu-fms systemd[1]: Failed to start Filemaker.com monitor system and start Nginx Serve>
Dec 22 17:36:24 ubuntu-fms systemd[1]: Starting Filemaker.com monitor system and start Nginx Server...
Dec 22 17:36:30 ubuntu-fms systemd[1]: com.filemaker.nginx.start.service: Succeeded.
Dec 22 17:36:30 ubuntu-fms systemd[1]: Stopped Filemaker.com monitor system and start Nginx Server.
Dec 22 17:38:20 ubuntu-fms systemd[1]: Starting Filemaker.com monitor system and start Nginx Server...
Dec 22 17:39:50 ubuntu-fms systemd[1]: com.filemaker.nginx.start.service: start operation timed out.
- えー、どうしよう……そこで気づく。もう一つ service が存在していることに!
/opt/FileMaker/etc/systemd/system/com.filemaker.nginx.graceful.service
-
com.filemaker.nginx.graceful.service
!! 中身を見てみましょう
com.filemaker.nginx.graceful.service
[Unit]
Description= Filemaker.com monitor system and graceful Nginx Server
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/sbin/nginx -c "/opt/FileMaker/FileMaker Server/NginxServer/conf/fms_nginx.conf" -s reload
[Install]
#WantedBy=multi-user.target
-
-s reload
!! これだ、求めていたのは! ということで、systemctl start com.filemaker.nginx.graceful.service
を実行してみるものの……
-
activating
のままフリーズ……そして、 failed !! しかも、その後 stop しても failed のまま戻ってこない。タチ悪いなあ……- ということで OS 再起動するしかない
-
ps ax | grep nginx
でプロセスを確認すると、以下のように表示される
853 ? Ss 0:00 nginx: master process /usr/sbin/nginx -c /opt/FileMaker/FileMaker Server/NginxServer/conf/fms_nginx.conf
854 ? S 0:00 nginx: worker process
855 ? S 0:00 nginx: worker process
856 ? S 0:00 nginx: worker process
857 ? S 0:00 nginx: worker process
858 ? S 0:00 nginx: worker process
1372 pts/0 R+ 0:00 grep --color=auto nginx
- じゃあ systemctl 使わずに直接
-s reload
コマンドを送ってやったらどうだ? ということで、次のコマンドを試す
/usr/sbin/nginx -c "/opt/FileMaker/FileMaker Server/NginxServer/conf/fms_nginx.conf" -s reload
- ……フリーズして返ってこない
- じゃあもう nginx の master process を kill しちゃえ!
kill 853
- 確かに kill されたもよう。しかし、ここから
systemctl start com.filemaker.nginx.start
しても/usr/sbin/nginx -c "/opt/FileMaker/FileMaker Server/NginxServer/conf/fms_nginx.conf"
しても、生き返りません。参ったなあ……
nginx 設定再読み込み方法の解
- さあ、もう最終手段です。
com.filemaker.nginx.start.service
ファイルの中に reload の定義を書き加えてやりましょう!! -
ExecReload=/bin/kill -s HUP $MAINPID
という記述をExecStart
の下の行に追記する。以下のように
com.filemaker.nginx.start.service
[Unit]
Description= Filemaker.com monitor system and start Nginx Server
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/sbin/nginx -c "/opt/FileMaker/FileMaker Server/NginxServer/conf/fms_nginx.conf"
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
#WantedBy=multi-user.target
- このあと
systemctl daemon-reload
を実行し、書き換えた設定ファイルを読み込み直す - そして以下コマンドを実行!
systemctl reload com.filemaker.nginx.start
- ……フリーズしない! status を確認してみると……
- ダウンしていない! リロードできている! やった、遂にたたかいに勝利した……
nginx 設定再読み込み方法のまとめ
- というわけで、まとめると……
-
/opt/FileMaker/etc/systemd/system/com.filemaker.nginx.start.service
ファイル内にExecReload=/bin/kill -s HUP $MAINPID
を追記 -
systemctl daemon-reload
で systemd のリロード - 以後
systemctl reload com.filemaker.nginx.start
コマンドで nginx の設定再読込がおこなわれるように
-
- ……って、フツーのひとがわかるかい! って感じですよね
2022/12/23 追記
- ……と、たたかいに勝利したかのように見えたわけですが、その後、実際に nginx の設定ファイルを書き換えてリロードしてみても……反映されない!? ということが判明。後日、検証のうえ、あらためて別方策を考えます……
nginx のログ
- また、ログの出力先もデフォルトのものではなく、FileMaker Server 独自のところに指定されていますので、nginx での運用に慣れている人ほど、要注意
/opt/FileMaker/FileMaker Server/NginxServer/logs/
nginx のチューニング
ファイルの分割
- はい、というわけでようやく、チューニングに入っていきましょう
- まずはファイルが長大になりすぎるのを避けて運用をしやすくするために、分割しておきます
- どこで分割するのがよいかというと、以下のあたり、
sorce_charset utf-8;
とserver {
との間あたりにするのがよいでしょう
fms_nginx.conf
### 前略 ###
proxy_request_buffering off; # we dont wait until the whole request is completed
charset utf-8;
source_charset utf-8;
server {
listen 80;
# Add headers for Cross-Origin Resource Sharing (CORS) policies
### 後略 ###
- さあ、そしてここから先は、後編記事に続く……
後編記事
おわりに
雑感
- nginx の再起動方法を探り当てるのに疲れ果てました。まさかこんなに試行錯誤することになろうとは……
- fmsadmin コマンドで簡単に再起動 or 設定再読込できるとよいですよね。というか
com.filemaker.nginx.graceful.service
が用意されているのだから、できるのではという気がするのですが……私が何か見落としているだけ……?
参考
- nginx から apache に戻すこともできるようです。よほどの apache ファンでもなければやる必要はないでしょうけれど……