Ir al contenido
Otras versiones

Cargando…

Configurando Nginx como reverse proxy HTTP

Exponer OpenKM directamente desde Tomcat puede ser peligroso si necesita que la aplicación sea accesible desde Internet (por ejemplo https://issues.jboss.org/browse/JBAS-3861). Como resultado, podría infectarse con PerlBot. Además, el puerto 8080 puede estar bloqueado por un firewall. Por estas razones, es buena idea 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 gestionar estas peticiones y reenviarlas al servidor de aplicación Tomcat usando el protocolo AJP13.

De la documentación de Apache: El protocolo AJP13 está orientado a paquetes. Se eligió un formato binario en vez del texto plano, más legible, probablemente por razones de rendimiento. El servidor web se comunica con el contenedor de servlets mediante conexiones TCP. Para reducir el coste de la creación de sockets, el servidor web intentará mantener conexiones TCP persistentes con el contenedor de servlets, y reutilizar una conexión para varios ciclos de petición/respuesta.

Se puede acceder a su OpenKM desde dos zonas distintas: Internet y la LAN. Esto significa que para acceder a este servidor necesita usar dos direcciones 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 asignada por su router de red local y a menudo empieza por 192.168.x.x. Estas direcciones IP solo son visibles para otros equipos de su red local (LAN), no para equipos conectados desde una red externa como Internet.

Para llegar a Internet o a un equipo en otra red, a su equipo normalmente se le asigna una dirección IP externa, que después puede usarse para referirse al equipo en su red local.

En la imagen de arriba, hay tres equipos en la red local, cada uno con su propia dirección IP interna asignada por el router. El ISP está conectado al router y le da 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 venga del router se “convierte” de la dirección IP externa a la dirección IP interna.

Así que si quiere que su instalación de OpenKM sea accesible tanto desde la LAN como desde Internet, el truco está 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 usa el DNS público. Así que necesita configurar un servidor DNS dentro de la LAN o modificar el fichero hosts de cada cliente para que resuelva a la IP interna.

Lo primero es instalar el software Apache necesario. En Debian/Ubuntu puede instalar Apache con un único comando:

Ventana de terminal
$ sudo apt-get install nginx

Ahora cree el fichero de configuración /etc/nginx/sites-available/openkm con este contenido:

Ventana de terminal
$ vim /etc/nginx/sites-available/openkm
server { listen 80;
server_name openkm.your-domain.com; # Avoid checking files size # client_max_body_size 0;
rewrite ^/$ /openkm permanent;
location /openkm/webSocket { proxy_pass http://localhost:8080/openkm/webSocket; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
location /openkm { proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/openkm;
}
}

Habilite esta configuración de sitio:

Ventana de terminal
$ ln -s /etc/nginx/sites-available/openkm /etc/nginx/sites-enabled/

Reinicie Nginx:

Ventana de terminal
$ sudo /etc/init.d/nginx restart

Compruebe el acceso a su instalación de OpenKM en http://openkm.your-domain.com/.

Use el gestor de aplicaciones yum para instalar Nginx:

Ventana de terminal
$ sudo yum install nginx

Habilítelo en el arranque:

Ventana de terminal
$ sudo chkconfig nginx --level 2345 on

Dependiendo de su versión de CentOS, esta versión de Nginx puede ser demasiado antigua, así que es mejor instalarlo desde sus repositorios. Para ello, cree un fichero llamado /etc/yum.repos.d/nginx.repo e incluya una de estas configuraciones:

CentOS

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

RedHat

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/
gpgcheck=0
enabled=1

Ahora cree el fichero de configuración /etc/nginx/conf.d/openkm.conf con este contenido:

Ventana de terminal
$ vim /etc/nginx/conf.d/openkm.conf
server {
listen 80;
server_name openkm.your-domain.com; # Avoid checking files size # client_max_body_size 0;
rewrite ^/$ /openkm/ permanent;
location /openkm/webSocket {
proxy_pass http://localhost:8080/openkm/webSocket;
proxy_http_version 1.1; proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /openkm { proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/openkm;
}
}

Reinicie Nginx:

Ventana de terminal
$ sudo /etc/init.d/nginx restart

Compruebe el acceso a su instalación de OpenKM en http://openkm.your-domain.com/.

Si no puede acceder al puerto del servidor desde otros equipos, revise la configuración de su firewall. Para más información, lea How To Set Up a Basic Iptables Firewall on Centos 6.

Estos son varios comandos útiles relacionados con SELinux:

Obtener toda la configuración HTTP relacionada

$ getsebool -a | grep httpd

Más información en SELinux Booleans.

Esta es una configuración distinta que funciona mejor para configuraciones multitenant:

location /openkm {
# Forward hostname
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
# Forward original client IP
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Forward port
proxy_set_header X-Forwarded-Port $server_port;
proxy_pass http://localhost:8080/openkm;
# Redirect http to https
proxy_redirect http:// https://;
# Optional: rewrite protocol
sub_filter 'http://' 'https://';
sub_filter_once off;
}