Configurar Apache HTTP Reverse-Proxy
Exponer OpenKM directamente desde Tomcat puede ser arriesgado. Si necesita que la aplicación sea accesible desde Internet (por ejemplo https://issues.jboss.org/browse/JBAS-3861), podría ser infectada por PerlBot. El puerto 8080 puede estar bloqueado por un cortafuegos; por este motivo es recomendable exponer su instalación de OpenKM a través del puerto web estándar 80. En los siguientes pasos explicamos cómo configurar Apache para que gestione estas peticiones y las reenvíe al servidor de aplicaciones Tomcat mediante el protocolo AJP13.
De la documentación de Apache: el protocolo AJP13 está orientado a paquetes. Presumiblemente se eligió un formato binario en lugar del texto plano, más legible, por razones de rendimiento. El servidor web se comunica con el contenedor de servlets mediante conexiones TCP. Para reducir el costoso proceso de creación de sockets, el servidor web intentará mantener conexiones TCP persistentes con el contenedor de servlets y reutilizar una conexión para múltiples ciclos de petición/respuesta.
IP interna frente a IP externa
Sección titulada «IP interna frente a IP externa»Su OpenKM puede accederse desde dos zonas distintas: Internet y LAN. Esto significa que, para acceder a este servidor, necesita utilizar dos IP: la IP externa (Internet) y la IP interna (LAN).
La dirección IP interna (también conocida como “dirección IP local”) es la dirección que asigna el router de su red local y que suele comenzar por 192.168.x.x. Estas direcciones IP solo pueden ser vistas por otros equipos de su red local (LAN) y no por los equipos conectados a una red externa como Internet.
Para llegar a Internet o a un equipo de otra red, a su equipo se le suele asignar una dirección IP externa, que puede utilizarse después para referirse al equipo de su red local.

En la imagen anterior hay tres equipos en la red local a cada uno de los cuales el router ha asignado su propia dirección IP interna. El ISP está conectado al router y le proporciona una dirección IP externa que le permite comunicarse con Internet. En Internet todos ven su dirección IP externa, pero cualquier información que llega al router se “convierte” de la dirección IP externa a la dirección IP interna.
Por tanto, si desea que su instalación de OpenKM sea accesible tanto desde la LAN como desde Internet, el truco consiste en configurar los equipos cliente para que resuelvan su IP interna (192.168.0.50) si están dentro de la LAN o la IP externa si están en Internet. Para resolver la IP de Internet (67.166.214.148), su equipo utiliza el DNS público. Por tanto, debe configurar una especie de servidor DNS dentro de la LAN o modificar el archivo hosts de cada cliente para que resuelva a la IP interna.
Debian y Ubuntu
Sección titulada «Debian y Ubuntu»Lo primero es instalar el software Apache necesario. En Debian / Ubuntu puede instalar Apache con un solo comando:
$ sudo apt-get install apache2Edite el archivo llamado /etc/apache2/apache2.conf y configure un ServerName para evitar advertencias en el proceso de arranque de Apache:
$ vim /etc/apache2/apache2.confServerRoot "/etc/apache2"ServerName "your-domain.com"Habilite el módulo proxy:
$ sudo a2enmod proxy_ajp$ sudo a2enmod proxy_wstunnelCree el archivo de configuración /etc/apache2/sites-available/openkm.conf con este contenido:
$ vim /etc/apache2/sites-available/openkm.conf<VirtualHost *:80> ServerName openkm.your-domain.com RedirectMatch ^/$ /OpenKM # WebSocket support - needs proxy-wstunnel ProxyPass /OpenKM/frontend/webSocket ws://127.0.0.1:8080/OpenKM/frontend/webSocket ProxyPassReverse /OpenKM/frontend/webSocket ws://127.0.0.1:8080/OpenKM/frontend/webSocket ProxyPass /OpenKM ajp://127.0.0.1:8009/OpenKM keepalive=On ProxyPassReverse /OpenKM http://openkm.your-domain.com/OpenKM ErrorLog /var/log/apache2/openkm-error.log CustomLog /var/log/apache2/openkm-access.log combined</VirtualHost>El ServerName del VirtualHost debe ser distinto del ServerName de la configuración principal de Apache. Habilite esta configuración de sitio:
$ cd /etc/apache2/sites-available/$ sudo a2ensite openkm.confDebe habilitar explícitamente el acceso proxy editando el archivo de configuración de Apache /etc/apache2/mods-available/proxy.conf:
$ vim /etc/apache2/mods-available/proxy.conf<IfModule mod_proxy.c> #turning ProxyRequests on and allowing proxying from all may allow #spammers to use your proxy to send emails.
ProxyRequests Off
<Proxy *> AddDefaultCharset off Order deny,allow Allow from all Deny from all #Allow from .example.com </Proxy>
# Enable/disable the handling of HTTP/1.1 "Via:" headers. # ("Full" adds the server version; "Block" removes all outgoing Via: headers) # Set to one of: Off | On | Full | Block
ProxyVia On</IfModule>Comprobar la configuración
Sección titulada «Comprobar la configuración»Reinicie Apache:
$ sudo /etc/init.d/apache2 restartCompruebe el acceso a su instalación de OpenKM desde http://openkm.your-domain.com/.
Red Hat y CentOS
Sección titulada «Red Hat y CentOS»Utilice el gestor de aplicaciones yum para instalar Apache:
$ sudo yum install httpdHabilítelo en el arranque:
$ sudo chkconfig httpd --level 2345 onAhora cree el archivo /etc/httpd/conf.d/openkm.conf con este contenido:
$ vim /etc/httpd/conf.d/openkm.conf<VirtualHost *:80> ServerName openkm.your-domain.com RedirectMatch ^/$ /OpenKM # WebSocket support ProxyPass /OpenKM/frontend/webSocket ws://127.0.0.1:8080/OpenKM/frontend/webSocket ProxyPassReverse /OpenKM/frontend/webSocket ws://127.0.0.1:8080/OpenKM/frontend/webSocket ProxyPass /OpenKM ajp://127.0.0.1:8009/OpenKM keepalive=On ProxyPassReverse /OpenKM http://openkm.your-domain.com/OpenKM ErrorLog /var/log/httpd/openkm-error.log CustomLog /var/log/httpd/openkm-access.log combined</VirtualHost>Comprobar la configuración
Sección titulada «Comprobar la configuración»Reinicie Apache:
$ sudo /etc/init.d/httpd restartCompruebe el acceso a su instalación de OpenKM desde http://openkm.your-domain.com/.
Error Permission denied: proxy: AJP: attempt to connect
Sección titulada «Error Permission denied: proxy: AJP: attempt to connect»Si en el registro aparece un error como Permission denied: proxy: AJP: attempt to connect, para solucionarlo ejecute el siguiente comando:
$ /usr/sbin/setsebool httpd_can_network_connect 1Si funciona, haga la configuración permanente para que persista tras los reinicios:
$ /usr/sbin/setsebool -P httpd_can_network_connect 1Windows
Sección titulada «Windows»Instale el servidor web apache desde http://httpd.apache.org/download.cgi (binario de windows sin mod_ssl)
Edite el archivo C:Program files\Apache Software Foundation\Apache2.2\conf\httpd.conf.
# Enable proxy modulesLoadModule proxy_module modules/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#Add in bottomNameVirtualHost *:80<VirtualHost *:80> ServerName openkm.your-domain.com RedirectMatch ^/$ /OpenKM
ProxyRequests Off ProxyVia On
<Proxy *> AddDefaultCharset off Order deny,allow Allow from all Deny from All </Proxy> # WebSocket support ProxyPass /OpenKM/frontend/webSocket ws://127.0.0.1:8080/OpenKM/frontend/webSocket ProxyPassReverse /OpenKM/frontend/webSocket ws://127.0.0.1:8080/OpenKM/frontend/webSocket ProxyPass /OpenKM ajp://127.0.0.1:8009/OpenKM keepalive=On ProxyPassReverse /OpenKM http://openkm.your-domain.com/OpenKM
ErrorLog logs/openkm-error_log CustomLog logs/openkm-access_log common</VirtualHost>Mac OS X
Sección titulada «Mac OS X»Edite el archivo llamado /etc/apache2/apache2.conf y configure un ServerName, habilite los módulos proxy y mod_proxy:
ServerRoot "/usr"ServerName "openkm.your-domain.com"
LoadModule proxy_module libexec/apache2/mod_proxy.soLoadModule proxy_ajp_module libexec/apache2/mod_proxy_ajp.so
<IfModule mod_proxy.c> ProxyRequests Off <Proxy "*"> AddDefaultCharset off Allow from all Deny from all Order Deny,Allow </Proxy> ProxyVia On</IfModule>Ahora cree el archivo de configuración /etc/apache2/sites/openkm.conf con este contenido:
<VirtualHost *:80> ServerName openkm.your-domain.com RedirectMatch ^/$ /OpenKM # WebSocket support ProxyPass /OpenKM/frontend/webSocket ws://127.0.0.1:8080/OpenKM/frontend/webSocket ProxyPassReverse /OpenKM/frontend/webSocket ws://127.0.0.1:8080/OpenKM/frontend/webSocket ProxyPass /OpenKM ajp://127.0.0.1:8009/OpenKM keepalive=On ProxyPassReverse /OpenKM http://openkm.your-domain.com/OpenKM
ErrorLog /var/log/apache2/openkm-error.log CustomLog /var/log/apache2/openkm-access.log combined</VirtualHost>Comprobar la configuración
Sección titulada «Comprobar la configuración»Reinicie Apache:
Compruebe el acceso a su instalación de OpenKM desde http://openkm.your-domain.com/.
Resolución de problemas
Sección titulada «Resolución de problemas»Si ve un mensaje de error como:
Debe habilitar este módulo de Apache:
$ sudo a2enmod rewrite$ sudo a2enmod proxy_http$ sudo a2enmod headers