Hey guys I ran into some issues installing ottoFMS on one of my clients dev server. I used Claude to help me troubleshoot. While I was able to get it to work, I ended up having to manually change some things in the web.config file. Here is the summarized findings. Can you tell me what I should be doing properly?
Environment:
- Windows Server with IIS already installed
- FileMaker Server 22.0.4
- OttoFMS 4.16.2
- OttoDeploy 2.3.0
Problem 1: OttoFMS console not accessible after installation
After installing OttoFMS on a Windows server that also had IIS running, navigating to https://[server-domain]/otto returned an IIS 404 error. The physical path in the error pointed to D:\FMDATA\BINS\www\otto, confirming IIS was intercepting requests before FileMaker’s Nginx could handle them.
Root cause: IIS was occupying port 443, preventing FileMaker’s built-in Nginx from binding to it. OttoFMS logs confirmed it was running correctly on http://localhost:3061 but traffic never reached it.
Fix: Added an IIS URL rewrite rule to the web.config file to proxy /otto traffic to OttoFMS on port 3061:
xml
<rule name="Otto" enabled="true" stopProcessing="true">
<match url="^otto(/(.*))?" />
<action type="Rewrite" url="http://127.0.0.1:3061/otto/{R:2}" />
</rule>
This rule should be placed at the top of the <rules> section, before all other rules. The web.config is typically located at D:\[FMDATA]\BINS\www\web.config.
Problem 2: OttoDeploy “Add Server” showing OttoFMS not installed / Otto Version: unknown
Even after the console was accessible, OttoDeploy’s Add Server dialog showed “OttoFMS not installed” with Otto Version: unknown — despite FileMaker version being detected correctly.
Verified that https://[server-domain]/otto/api/info returned correct OttoFMS data in the browser. The issue was therefore not the Otto rewrite rule itself.
Root cause: The web.config had custom CORS headers in the <customHeaders> section:
xml
<add name="Access-Control-Allow-Origin" value="[machine-hostname]" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" />
<add name="Access-Control-Allow-Credentials" value="true" />
OttoFMS sets its own Access-Control-Allow-Origin header. With IIS also setting one, the response contained two Access-Control-Allow-Origin headers, which browsers and FileMaker’s fetch API reject — causing OttoDeploy to silently fail the version check.
Fix: Remove those three CORS header lines from web.config, then run iisreset in an elevated Command Prompt.
Follow-up concern: OttoFMS sets Access-Control-Allow-Origin: *
After removing the IIS CORS headers, we confirmed via browser developer tools that OttoFMS itself is setting Access-Control-Allow-Origin: * (wildcard) on the /otto/api/info endpoint. This was flagged as a potential security concern by a colleague.
Questions for the OttoFMS team:
- Is the wildcard
Access-Control-Allow-Origin: *on OttoFMS API endpoints intentional? - Is there a plan to implement more restrictive CORS policies (e.g., specific allowed origins)?
- Is there official documentation or a recommended
web.configconfiguration for Windows/IIS servers running alongside OttoFMS? The current IIS conflict is not documented and caused significant troubleshooting.