Created at:
Modified at:
Apache notes
Apache and Tomcat with mod_jk
This document show the must basic configuration of mod_jk
for Apache to make
it work connected to Tomcat.
Install the ap-jk
package from pkgsrc, that will build and install mod_jk
module.
Just after the install, a message appear and give an example about
httpd.conf
configuration::
LoadModule jk_module lib/httpd/mod_jk.so
<IfModule mod_jk.c>
JkWorkersFile /usr/pkg/tomcat/conf/workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
</IfModule>
So, looking to these configuration is easy to see that there is a
workers.properties file. Tomcat documentation gives a very good example of
workers.properties and httpd.conf. So workers.properties in
/usr/pkg/tomcat/conf/workers.properties
is::
workers.tomcat_home=/usr/pkg/tomcat
workers.java_home=/usr/pkg/java/sun-1.5
ps=/
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
Tomcat documentation: The AJP Connector
The port used by the protocol (AJP 1.3) to make this connection is 8009, as set in the workers.properties file. The server.xml file also holds this information for Tomcat.
We also need to tell mod_jk
to "mount" the Tomcat application in the http
URL, that is, make HTTP URLs be translated to Tomcat application. Example::
http://<site>/source/
should show the same page as::
http://<site>:8080/source/
(supposing that Tomcat is running in port 8080).
So httpd.conf
turns::
LoadModule jk_module lib/httpd/mod_jk.so
<IfModule mod_jk.c>
JkWorkersFile /usr/pkg/tomcat/conf/workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkMount /source/* ajp13
</IfModule>
Just restart Apache and see if it is working.
HTTP authentication
Simple authentication
To make Apache apache work with HTTP authentication, globally, put inside a <Directory> directive, Auth* and Require directives, like in the following example::
<Directory />
Options FollowSymLinks
AllowOverride None
AuthType Basic
AuthName "Authentication Required"
AuthUserFile /usr/pkg/etc/httpd/passwd
Require user username
</Directory>
This will make authentication be required for all directories in the server.
Don't forget to create the passwd file with htpasswd (see that the passwd file can have any name and be anywhere, since you configured its path correctly in the AuthUserFile directive). Also "username" is the name of the user you want to provide access to::
# htpasswd -c /usr/pkg/etc/httpd/passwd username
New password: <type password here>
Re-type password: <type password again>
Restart the server. Authentication is probably running fine.
LDAP authentication
(2012-09-04)
LDAP authentication is a bit different from basic authentication. You need to insert some other configuration options. The following example make user login according to its e-mail field on the LDAP database::
<Directory /var/www/html>
AuthType Basic
AuthName "LDAP authentication"
AuthLDAPURL ldap://ldapserver:389/o=bla?mail
require valid-user
</Directory>
If you have an Organization Unit (ou) called "Groups", with Groups defined on it and users added to the groups (where a user can belong to more than one group, like in Unix groups) and want to authenticate only users belonging to a given group, for instance, the "mygroup" group, follow this example::
<Location /myarea>
AuthType Basic
AuthName "LDAP authentication"
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPGroupAttributeIsDN off
AuthLDAPGroupAttribute memberUid
AuthLDAPURL "ldap://ldapserver:389/ou=Users,dc=foo,dc=bar,dc=com?uid"
require ldap-group cn=mygroup,ou=Groups,dc=foo,dc=bar,dc=com
Order deny,allow
allow from all
</Location>
You may combine other attributes to authenticate, besides "uid". According to
the mod_authnz_ldap documentation, the standards (RFC 2255, obsoleted by
RFC 4516) allow the use of multiple attributes separated by comma, but
Apache does not support it. You can use filters instead. See how the
AuthLDAPURL
directive looks after using the filter mechanism to match
users whose attribute "employeeType" has the "Worker" string::
AuthLDAPURL "ldap://ldapserver:389/ou=Users,dc=foo,dc=bar,dc=com?uid?sub?(employeeType=Worker)"
Troubleshooting
httpd: apr_sockaddr_info_get() failed for HOST
(2011-05-11)
I'm using Apache 2.2 in NetBSD 5.1 and, just after I started Apache for the first time, I got this error::
httpd: apr_sockaddr_info_get() failed for auron
"auron" is the name of my host.
The problem was that /etc/hosts
didn't have an entry indicating that
127.0.0.1
, besides being localhost
, is also auron
.
So I just added to /etc/hosts
::
127.0.0.1 auron
Unknown Authn provider: ldap
when implementing LDAP HTTP authentication
(2011-07-12)
If you are trying to configure LDAP HTTP authentication in Apache 2.2 in a Debian system, maybe the following error came up::
Unknown Authn provider: ldap
It is probably because you has a link to ldap.load
in
/etc/apache2/mods-enabled
but don't have a link to authnz_ldap.load
there, so create it. I'm using Debian, but you might have to check your
system configuration.
Apache and Subversion authentication with Microsoft Active Directory
"File not found" and AH01071: Got error 'Primary script unknown
Possible solution: Check permissions for all directories in the path to
index.html
(or similar) can be accessed by the user that runs Apache.