'Reverse Proxy to HTTP server via IIS with SSL
web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyApi" stopProcessing="true">
<match url="api/(.*)" />
<action type="Rewrite" url="http://localhost:3000/{R:1}" />
</rule>
<rule name="ReverseProxyClient" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{CACHE_URL}" pattern="^(.+)://" />
</conditions>
<action type="Rewrite" url="{C:1}://localhost:3001/{R:1}" />
<serverVariables>
<set name="HTTP_SEC_WEBSOCKET_EXTENSIONS" value="" />
</serverVariables>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
I have successfully created a reverse proxy from http://localhost:9999 to my http://localhost:3000 (NestJS api server) and http://localhost:3001 (NextJS client server) using the above config in rewrite url.
My problem is that I am geting an error when I tried to bind https://localhost:8888 to the same site. I made sure that the https url is in the site bindings. I also have a self signed ssl certificate with it.
This is the error I am getting:
As you can see here https://localhost:8888 is in the site bindings

This is self signed certificate that I am using

I have no idea what is wrong in my setup. I have tried to restart both the website and the whole IIS server but I am getting the same error.
Solution 1:[1]
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyApi" stopProcessing="true">
<match url="api/(.*)" />
<action type="Rewrite" url="http://localhost:3000/{R:1}" />
</rule>
<rule name="ReverseProxyClient" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{CACHE_URL}" pattern="^(.+)://" />
</conditions>
<action type="Rewrite" url="{MapProtocol:{C:1}}://localhost:3001/{R:1}" />
<serverVariables>
<set name="HTTP_SEC_WEBSOCKET_EXTENSIONS" value="" />
</serverVariables>
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="MapProtocol">
<add key="https" value="http" />
<add key="wss" value="ws" />
</rewriteMap>
</rewriteMaps>
</rewrite>
</system.webServer>
</configuration>
This web config works. I think what was wrong in my previous config is that https://localhost:8888 is redirected to https://localhost:3001 which does not exist (because of the {C:1}).
With this new config:
ws:// or wss:// -> ws://
http:// or https:// -> http://
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |

