You’ve seen this movie before. Someone needs to expose a quick internal service, they fire up a Jetty instance, and before you can say “reverse proxy,” it’s open to the internet. You tighten the firewall, patch the dependencies, and still lose sleep wondering who’s poking around in the logs. This is where pairing IIS with Jetty starts to make sense.
On its own, Jetty is a fast, lightweight Java web server. Great for embedding applications or running REST APIs that need minimal overhead. IIS, on the other hand, is a heavyweight gateway—a reverse proxy, static content server, and guard at the castle gate for Windows environments. When you tie IIS and Jetty together, you get the control and authentication management of IIS with the flexibility and speed of Jetty. The trick is making that handoff secure, repeatable, and simple enough that no one avoids it “just this once.”
Here’s the high-level flow. IIS sits out front, handling TLS termination and user authentication, often through Active Directory or a cloud identity provider like Okta or Azure AD. Once access is verified, IIS proxies traffic to Jetty running on an internal port. Jetty focuses on what it does best—serving dynamic content or hosting Java applications—without worrying about authentication or certificate renewal. You get clean separation of concerns with fewer moving parts exposed to the public web.
To keep this pattern stable, configure IIS to forward standard headers (Host, X-Forwarded-*). Set strict ACLs so only IIS can reach Jetty’s port. Map identity claims to application roles using OIDC groups or SAML attributes. And yes, rotate your secrets. That includes any API keys Jetty needs for downstream systems. You can automate most of this with infrastructure-as-code templates or configuration management tools like Ansible.
Key benefits of the IIS Jetty setup