mod_jk : Mod_jk is an Apache module used to connect the Tomcat servlet container with web servers such as Apache, iPlanet, Sun ONE (formerly Netscape) and even IIS using the Apache JServ Protocol. A web server waits for client HTTP requests.
This technology is used by 1.72% of websites in the Web server extensions category. The most popular industry vertical is Business and Finance, with Computing being the top subcategory.
What is mod_jk?
mod_jk is an Apache HTTP Server connector module developed by the Apache Software Foundation to enable seamless communication between the Apache web server and Apache Tomcat servlet container. Originally created as part of the Jakarta project in the early 2000s, mod_jk was designed to solve a fundamental infrastructure challenge: allowing organizations to leverage Apache HTTP Server's proven strengths in serving static content, handling SSL termination, and managing virtual hosts while routing Java-based dynamic requests to Tomcat for servlet and JSP processing. The module replaced the earlier mod_jserv connector and quickly became the standard mechanism for integrating these two critical components of Java web application infrastructure.
mod_jk operates by implementing the Apache JServ Protocol (AJP), a binary communication protocol optimized for high-performance data exchange between a front-end web server and a back-end application server. When a request arrives at Apache HTTP Server that matches a configured URL pattern, mod_jk intercepts the request, packages the HTTP headers and body into the compact AJP binary format, and forwards it to one or more Tomcat instances over persistent TCP connections. Tomcat processes the servlet or JSP request and returns the response through the same AJP channel, which mod_jk then delivers back to the client. Key capabilities include worker-based load balancing across multiple Tomcat instances, sticky session support, health monitoring with automatic failover, and fine-grained URL pattern mapping.
mod_jk remains one of the most widely deployed connector solutions in enterprise Java environments, particularly in organizations running legacy infrastructure that predates newer alternatives like mod_proxy_ajp. It powers the web tier of countless government agencies, financial institutions, educational platforms, and large-scale e-commerce systems worldwide. While the Apache Software Foundation has introduced simpler alternatives through the mod_proxy family of modules, mod_jk continues to be preferred in scenarios requiring advanced load balancing configurations, granular worker management, and detailed operational monitoring. The module's mature codebase, extensive documentation, and battle-tested reliability in production environments with millions of daily requests have cemented its position as a foundational technology in the Java application server ecosystem.
Industry Vertical Distribution
Technologies Frequently Used with mod_jk
| Technology | Co-usage Rate | Website |
|---|---|---|
| Apache Tomcat | 99.84% | http://tomcat.apache.org |
| OpenSSL | 92.47% | http://openssl.org |
| Apache | 89.58% | http://apache.org |
| jQuery | 61.06% | https://jquery.com |
| PHP | 56.57% | http://php.net |
| Google Analytics | 43.75% | http://google.com/analytics |
| Java | 29.01% | http://java.com |
| Bootstrap | 27.72% | https://getbootstrap.com |
| Font Awesome | 26.76% | https://fontawesome.com/ |
| Google Font API | 26.28% | http://google.com/fonts |
mod_jk Platform Architecture
AJP13 Binary Protocol Communication Layer: mod_jk implements the Apache JServ Protocol version 1.3, a binary protocol that significantly outperforms HTTP-based proxying for internal server communication. AJP13 transmits request headers as compact two-byte codes rather than full text strings, reducing bandwidth consumption and parsing overhead on the Tomcat side. The protocol maintains persistent TCP connections between Apache and Tomcat workers, eliminating the cost of repeated connection establishment. Each AJP connection carries multiplexed request and response data with built-in packet framing, enabling efficient bidirectional data flow.
Worker-Based Request Routing Architecture: mod_jk organizes backend Tomcat instances as named workers defined in a dedicated workers.properties configuration file. Each worker specifies its host address, AJP port, connection pool parameters, and load balancing weight. The module supports multiple worker types including ajp13 workers for direct connections, lb workers for load-balanced clusters, and status workers for runtime monitoring. This flexible worker abstraction allows administrators to model complex deployment topologies including active-active clusters, active-passive failover pairs, and tiered routing configurations where different URL patterns are directed to specialized Tomcat instances.
Load Balancing with Sticky Session Support: The load balancer worker type distributes incoming requests across multiple Tomcat backend instances using configurable algorithms including weighted round-robin, session-based affinity, and traffic-based balancing. Sticky sessions ensure that once a user session is established on a particular Tomcat instance, all subsequent requests from that session are routed to the same backend, preserving in-memory session state. The module embeds the worker identifier in the session cookie or URL-encoded session ID, enabling transparent session affinity without requiring external session replication or centralized session storage infrastructure.
Health Monitoring and Automatic Failover: mod_jk continuously monitors the health of backend Tomcat workers through connection verification and configurable retry mechanisms. When a worker fails to respond or returns connection errors, the module automatically marks it as in error state and redirects traffic to healthy workers in the cluster. Recovery detection runs on configurable intervals, automatically reinstating workers once they become responsive again. Administrators can set retry counts, connection timeouts, and recovery wait periods to tune failover behavior for their specific availability requirements and network characteristics.
JkMount URL Pattern Mapping Engine: The JkMount directive system provides granular control over which URL patterns are forwarded to Tomcat and which remain served directly by Apache. Administrators define mount points using wildcard and path-based patterns, such as routing all requests matching /*.jsp or /api/* to designated workers while keeping static assets served by Apache's native file handler. The unmount directive allows exceptions within mounted paths, and the uriworkermap.properties file supports dynamic remapping without requiring Apache restarts. This architecture enables precise separation of concerns between the web server and application server tiers.
AI-Powered Technology Recommendations
Our AI recommender engine, trained on 100 million data points, suggests these technologies for websites using mod_jk:
| Technology | AI Score | Website |
|---|---|---|
| Apache Tomcat | 0.63 | http://tomcat.apache.org |
| Java | 0.35 | http://java.com |
| Red Hat | 0.35 | https://www.redhat.com |
| OpenSSL | 0.33 | http://openssl.org |
| mod_ssl | 0.27 | http://modssl.org |
| UNIX | 0.24 | http://unix.org |
| mod_dav | 0.23 | http://webdav.org/mod_dav |
| FreeBSD | 0.23 | http://freebsd.org |
| Adobe Experience Manager | 0.2 | https://www.adobe.com/marketing/experience-manager.html |
| Jetty | 0.19 | http://www.eclipse.org/jetty |
IAB Tier 1 Vertical Distribution
Relative Usage by Industry
Market Distribution Comparison
mod_jk Use Cases
Apache-Tomcat Reverse Proxy for Java Web Applications: The most common mod_jk deployment serves as a reverse proxy layer where Apache HTTP Server handles all incoming client connections, serves static content directly, and forwards dynamic servlet and JSP requests to Tomcat via AJP. This architecture leverages Apache's mature SSL/TLS implementation, virtual hosting capabilities, and URL rewriting engine while offloading Java application logic to dedicated Tomcat instances.
Load-Balanced Tomcat Cluster for High Availability: Enterprise environments deploy mod_jk's load balancer worker to distribute traffic across multiple Tomcat instances running identical application deployments. With sticky session support and automatic failover, this configuration ensures continuous service availability even when individual Tomcat nodes require maintenance or experience unexpected failures. Weighted routing allows administrators to direct more traffic to higher-capacity servers within heterogeneous clusters.
SSL Termination and Security Gateway: Organizations use Apache with mod_jk as an SSL termination point, handling all certificate management and TLS handshake processing at the web server tier. Internal AJP communication between Apache and Tomcat travels over the trusted network without encryption overhead, improving overall throughput. Apache's robust access control modules, rate limiting, and request filtering provide an additional security layer that screens requests before they reach the application server.
Static and Dynamic Content Separation: mod_jk enables efficient content serving by allowing Apache to handle static resources such as images, CSS files, JavaScript bundles, and downloadable documents directly from its file system, while only routing application requests to Tomcat. This separation reduces the load on Tomcat instances significantly, as they focus exclusively on executing business logic rather than serving files that Apache delivers far more efficiently through its optimized file handling and caching mechanisms.
Blue-Green Deployment and Rolling Updates: Administrators leverage mod_jk's worker management capabilities to implement zero-downtime deployments. By configuring multiple worker groups, teams can route traffic away from a set of Tomcat instances being updated, deploy the new application version, verify its health, and then shift traffic to the updated instances. The dynamic uriworkermap.properties file enables these routing changes without restarting Apache, maintaining uninterrupted service throughout the deployment process.
Multi-Application Routing on Shared Infrastructure: mod_jk's granular URL mapping enables a single Apache front end to route different application paths to separate Tomcat instances, each running distinct Java applications. A path like /billing/* can be directed to one Tomcat cluster hosting the billing application, while /inventory/* routes to an entirely different cluster. This pattern supports microservice-style architectures on traditional infrastructure, allowing teams to independently deploy and scale individual applications behind a unified entry point.
IAB Tier 2 Subcategory Distribution
Top Websites Using mod_jk
| Website | IAB Category | Subcategory | OpenRank |
|---|---|---|---|
| cargurus.com | Automotive | Auto Body Styles | 5.03 |
| kidshealth.org | Family and Relationships | Children's Health | 4.98 |
| sigmm.org | Business and Finance | Computing | 4.58 |
| ngugiwathiongo.com | Books and Literature | Fiction | 4.49 |
| britam.com | Hobbies & Interests | Travel Type | 4.43 |
| tribalpages.com | Hobbies & Interests | Genealogy and Ancestry | 4.36 |
| storeharmony.com | Business and Finance | Marketplace/eCommerce | 4.26 |
| geetsansar.com | Music and Audio | Country Music | 4.26 |
| jbfsale.com | Shopping | Travel Type | 4.26 |
| liveen.com | Personal Finance | Social | 4.26 |
mod_jk Development Examples
Workers Properties Configuration for Load-Balanced Tomcat Cluster
# /etc/httpd/conf/workers.properties
# mod_jk worker configuration for a load-balanced Tomcat cluster
# Define the list of workers
worker.list=loadbalancer,jk-status
# ============================================
# Worker 1: Tomcat instance on server node1
# ============================================
worker.tomcat1.type=ajp13
worker.tomcat1.host=192.168.1.101
worker.tomcat1.port=8009
worker.tomcat1.lbfactor=3
worker.tomcat1.connection_pool_size=50
worker.tomcat1.connection_pool_timeout=600
worker.tomcat1.socket_timeout=300
worker.tomcat1.socket_keepalive=true
worker.tomcat1.ping_mode=A
worker.tomcat1.ping_timeout=10000
worker.tomcat1.recovery_options=7
worker.tomcat1.retries=2
# ============================================
# Worker 2: Tomcat instance on server node2
# ============================================
worker.tomcat2.type=ajp13
worker.tomcat2.host=192.168.1.102
worker.tomcat2.port=8009
worker.tomcat2.lbfactor=3
worker.tomcat2.connection_pool_size=50
worker.tomcat2.connection_pool_timeout=600
worker.tomcat2.socket_timeout=300
worker.tomcat2.socket_keepalive=true
worker.tomcat2.ping_mode=A
worker.tomcat2.ping_timeout=10000
worker.tomcat2.recovery_options=7
worker.tomcat2.retries=2
# ============================================
# Worker 3: Tomcat instance on server node3
# ============================================
worker.tomcat3.type=ajp13
worker.tomcat3.host=192.168.1.103
worker.tomcat3.port=8009
worker.tomcat3.lbfactor=2
worker.tomcat3.connection_pool_size=30
worker.tomcat3.connection_pool_timeout=600
worker.tomcat3.socket_timeout=300
worker.tomcat3.socket_keepalive=true
worker.tomcat3.ping_mode=A
worker.tomcat3.ping_timeout=10000
# ============================================
# Load Balancer Worker
# ============================================
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2,tomcat3
worker.loadbalancer.sticky_session=true
worker.loadbalancer.sticky_session_force=false
worker.loadbalancer.method=Request
worker.loadbalancer.retries=3
# ============================================
# Status monitoring worker
# ============================================
worker.jk-status.type=status
Apache Virtual Host Configuration with mod_jk Directives
# /etc/httpd/conf.d/mod_jk.conf
# Apache HTTP Server configuration for mod_jk connector
# Load the mod_jk module
LoadModule jk_module modules/mod_jk.so
# Path to workers.properties configuration
JkWorkersFile /etc/httpd/conf/workers.properties
# Shared memory log for load balancer runtime data
JkShmFile /var/log/httpd/mod_jk.shm
# mod_jk logging configuration
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkRequestLogFormat "%w %V %T %s %R"
# Global mount points for all virtual hosts
JkMount /status jk-status
JkMount /status/* jk-status
# ============================================
# Virtual Host: Main Java Application
# ============================================
<VirtualHost *:443>
ServerName app.example.com
DocumentRoot /var/www/app.example.com/htdocs
SSLEngine On
SSLCertificateFile /etc/pki/tls/certs/app.example.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/app.example.com.key
# Route Java application requests to Tomcat cluster
JkMount /api/* loadbalancer
JkMount /webapp/* loadbalancer
JkMount /*.jsp loadbalancer
JkMount /servlet/* loadbalancer
# Keep static content served by Apache
JkUnMount /static/* loadbalancer
JkUnMount /images/* loadbalancer
JkUnMount /css/* loadbalancer
JkUnMount /js/* loadbalancer
# Environment variables forwarded to Tomcat
JkEnvVar REMOTE_ADDR
JkEnvVar SSL_CLIENT_S_DN
# Restrict status worker to internal network
<Location /status>
JkMount jk-status
Require ip 10.0.0.0/8
Require ip 192.168.0.0/16
</Location>
# Serve static content with caching headers
<Directory "/var/www/app.example.com/htdocs/static">
Options -Indexes
ExpiresActive On
ExpiresByType image/png "access plus 30 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType application/javascript "access plus 7 days"
</Directory>
</VirtualHost>
Usage by Domain Popularity (Top 1M)
Usage by Domain Age
The average age of websites using mod_jk is 14.4 years. The average OpenRank (measure of backlink strength) is 2.2.
Why Teams Choose mod_jk
High-Performance Binary Protocol Communication: mod_jk's AJP13 binary protocol dramatically reduces the overhead of proxying requests compared to HTTP-based forwarding mechanisms. By encoding headers as compact two-byte identifiers and maintaining persistent connections, AJP eliminates the repeated parsing and connection establishment costs associated with HTTP proxying. Teams operating high-throughput Java applications consistently measure lower latency and higher request-per-second capacity when using mod_jk compared to text-based proxying alternatives.
Advanced Load Balancing with Sticky Sessions: The load balancer worker provides enterprise-grade traffic distribution with configurable weighting, session affinity, and multiple balancing algorithms. Sticky sessions ensure that users maintain consistent application state without requiring expensive session replication across Tomcat nodes. Teams managing stateful Java applications rely on this capability to deliver seamless user experiences while distributing load across their infrastructure, avoiding the complexity of implementing external session stores.
Automatic Health Monitoring and Failover: mod_jk continuously verifies the availability of backend Tomcat workers and automatically removes unhealthy instances from the active rotation. When a failed worker recovers, the module detects its availability and gradually reintroduces it to the traffic pool. This self-healing behavior minimizes service disruptions and reduces the operational burden on infrastructure teams, who can perform maintenance on individual Tomcat nodes with confidence that traffic will seamlessly redirect to healthy instances.
Granular URL Mapping and Request Routing: The JkMount and JkUnMount directive system gives administrators precise control over which requests reach Tomcat and which Apache serves directly. This granularity enables optimal resource utilization by ensuring that Tomcat processes only the dynamic requests that require servlet execution, while Apache's highly optimized file serving handles static assets. Teams leverage this separation to reduce Tomcat resource consumption significantly, often enabling smaller Tomcat deployments than would be necessary with direct client-facing configurations.
Battle-Tested Stability in Production Environments: With over two decades of production deployment across thousands of enterprise environments, mod_jk has proven its reliability under extreme operational conditions. The module's mature codebase has been hardened through years of real-world usage in mission-critical systems including financial trading platforms, government portals, and large-scale e-commerce sites. Teams choose mod_jk when stability and predictability are paramount, knowing that the connector's behavior under stress has been thoroughly validated across countless production scenarios.
Detailed Operational Monitoring via Status Worker: The built-in jk-status worker provides a real-time monitoring dashboard displaying connection pool utilization, request counts, error rates, and worker health status for every configured Tomcat instance. Operations teams use this visibility to identify performance bottlenecks, detect capacity constraints before they impact users, and validate that load distribution matches their intended configuration. The status interface supports both read-only monitoring and runtime management actions such as disabling workers for maintenance.
Dynamic Configuration Without Service Restarts: mod_jk supports runtime reconfiguration through the uriworkermap.properties file, which the module periodically rescans for changes without requiring an Apache restart. This capability enables teams to modify URL routing rules, redirect traffic during deployments, and respond to operational incidents by adjusting worker assignments on the fly. The elimination of restart-induced service interruptions is critical for organizations operating under strict availability SLAs that cannot tolerate even brief configuration change windows.
Emerging Websites Using mod_jk
| Website | IAB Category | Subcategory | OpenRank |
|---|---|---|---|
| 15v.net | Personal Finance | Insurance | 0 |
| lagunawoodsgaragedoorrepair.com | Automotive | Auto Repair | 0 |
| car-radiators-brisbane.com.au | Business and Finance | Industries | 0 |
| vonderheide-flooring.com | Home & Garden | Interior Decorating | 0 |
| export-operations.com | Business and Finance | Industries | 0 |
Technologies Less Frequently Used with mod_jk
| Technology | Co-usage Rate | Website |
|---|---|---|
| Linkedin Insight Tag | 0.16% | https://business.linkedin.com/marketing-solutions/insight-tag |
| Yoast SEO Premium | 0.16% | https://yoast.com/wordpress/plugins/seo/ |
| ScrollMagic | 0.16% | https://scrollmagic.io |
| Lua | 0.16% | http://www.lua.org |
| OpenResty | 0.16% | http://openresty.org |