为了对 FileMakerServer 中的 nginx 进行调优,需要进行前期准备工作

首先

开始的话

    本記事は FileMaker Advent Calendar 2022 21 日目の記事です。

 

针对的读者

Claris FileMaker Server で nginx を運用している人

前提 tí)

    • 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 へ投げているわけですね

 

    このファイルについては弄る必要はないです
# 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 の略だそうです
# 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 つめは、解説不要なくらいシンプルですね

 

    こちらも弄る必要はないです
# Claris nginx https conf for port 80
return 301 https://$host$request_uri;

FMS_nginx.conf

    • というわけで本命の 4 つめですが……正直ちょっと、一つのファイルに設定盛り込みすぎ!! って感じです

 

    • チューニングのために弄る必要があるファイルはここなのですが、ここを直接書き換えるのは気が引けてきますので、別ファイルに切り分けるようにしてみましょう

 

    • ひとまず中身はこんな感じです、ということでまずは全部貼っておきます

 

    この中を読んでいくと、上記 3 つの .conf ファイルについては、このファイルの中で include として読み込んでいることがわかります
# 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 を設定ファイルとして用いる旨が書かれていますね
[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 を除いたものになりますね

 

    これを打つと、以下のように返ってくるはずです
image.png
    • 同じようにして restart や stop のサービスも登録されています

start と異なり、この 2 つは常時 active になるようなものではないですね

image.png
image.png
    • ……で、nginx の起動状態が異常時であると、以下のように赤表示となります

わざと異常を起こしたわけですが、start が正常稼働している状態で systemctl start com.filemaker.nginx.start などとすると、こうなります

image.png
    上記のようになってしまって 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 で再起動できるんじゃない? と思って試してみても、上記と同様でプロセスがお亡くなりになります

image.png
    何が起きているのかもう少し調べてみたいわけですが 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 !! 中身を見てみましょう

[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 を実行してみるものの……

image.png

activating のままフリーズ……そして、 failed !! しかも、その後 stop しても failed のまま戻ってこない。タチ悪いなあ……

ということで OS 再起動するしかない

image.png

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” しても、生き返りません。参ったなあ……
image.png

重新加载nginx配置的方法解释。

    • さあ、もう最終手段です。 com.filemaker.nginx.start.service ファイルの中に reload の定義を書き加えてやりましょう!!

ExecReload=/bin/kill -s HUP $MAINPID という記述を ExecStart の下の行に追記する。以下のように

[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 を確認してみると……
image.png
    ダウンしていない! リロードできている! やった、遂にたたかいに勝利した……

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 { との間あたりにするのがよいでしょう
### 前略 ###

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

### 後略 ###
    さあ、そしてここから先は、後編記事に続く……

下一篇文章

    Qiita – FileMakerServer での nginx チューニング

 

最后

感慨万千

    • nginx の再起動方法を探り当てるのに疲れ果てました。まさかこんなに試行錯誤することになろうとは……

 

    fmsadmin コマンドで簡単に再起動 or 設定再読込できるとよいですよね。というか com.filemaker.nginx.graceful.service が用意されているのだから、できるのではという気がするのですが……私が何か見落としているだけ……?

请参考

    • nginx から apache に戻すこともできるようです。よほどの apache ファンでもなければやる必要はないでしょうけれど……

Claris Community – FileMaker Server を 19.5.1 に、Ubuntu を 20.04 にアップグレードする – ステップ 5. Web サーバーの切り替え(オプション)

bannerAds