Android: fallan las conexiones

Vamos indicando el entorno, se tiene una app en Android y que hace llamadas de tipo POST a un servidor para obtener datos, el servidor cuenta con SO Centos 6, apache, php 5.6, mysql, un servidor normal.

Lo que sucede, se tiene varios dispositivos de la misma red (6 dispositivos) trabajando con la app al mismo tiempo, cuando ingresa uno nuevo suceden dos cosas.

  • El ultimo simplemente deja de recibir la informacion del servidor por medio de la app.
  • Todas se bloquean excepto el primer dispositivo que uso la app.

Los mensajes de error en adroid son los siguientes:

org.apache.http.conn.HttpHostConnectException: Connection to https://xxx.com/ refused
java.net.SocketTimeoutException: failed to connect to xxx.com/111.222.333.444 (port 443) after 3000ms

La solucion en este caso fue desactivar el TCP timestamps de centos.

echo "0" > /proc/sys/net/ipv4/tcp_timestamps

Apache: KeepAlive On

apache_logo

Un caso de estudio

El servidor

  • Centos 6.
  • Apache.
  • PHP 5.6

Los clientes

  • MAC OS.
  • Windows.

El problema:

Se tiene una aplicacion en PHP sin frameworks mas que uno que otro generador, tablas, formularios, etc.

Cuando dos clientes (en la misma red) con SO MAC OS intentan ingresar a la aplicacion, esta responde correctamente al primer cliente pero con el segundo, se bloquea, y se pone tremendamente lenta, no se corta solo que la carga se pone demasiada lenta. Para los clientes Windows funciona correctamente

Despues de hacer varias pruebas en los clientes, desactivando caches, definiendo DNSs, probando con el TTFB, etc. Se intuye que el problema esta en el servidor.

Revisando la configuracion de Apache, se observa que el parametro KeepAlive  (la misma aplicacion corre en varios servidores y todos los servidores tienen la misma configuracion), se encuentra desactivado, se procede a encender la opcion y… funciona, todo solucionado.

KeepAlive Off

Captura de pantalla 2018-02-19 a las 22.31.45.png

KeepAlive On

Captura de pantalla 2018-02-19 a las 22.33.41.png

 

Apache: bad user name ${APACHE_RUN_USER} (3)

Este error ha empezado a presentarse en las últimas versiones de Ubuntu, la verdad no se a que se deba pero sucede cuando se intenta levantar el servicio de Apache usando la siguiente orden:

sudo /etc/init.d/start

Para levantar el servicio de Apache también se puede usar:

sudo service apache2 start

Y con esta última orden ya no se tiene el error y levanta el servicio sin problemas.

Apache: bad user name ${APACHE_RUN_USER} (2)

 

De nuevo con este error, pero ahora la cosa es que si ya hicimos lo mencionado en:

Apache: bad user name ${APACHE_RUN_USER} (1)

Y al iniciar el servicio de apache aparece lo siguiente:

(2)No such file or directory: apache2: could not open error log file /etc/apache2/${APACHE_LOG_DIR}/error.log.Unable to open logs

Entonces si dejamos el archivo apache2.conf sin modificar es decir con los parámetros iniciales:

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Y en consola ejecutamos:

sudo apache2ctl start

Tendríamos que tener el servicio de apache funcionando =)

SO: Kubuntu 10.10

Apache: bad user name ${APACHE_RUN_USER} (1)

Generalmente tengo el servidor apache funcionando todo el tiempo (cosa que por seguridad no debería tenerlo) al momento de modificar algunos parámetros del php.ini necesitaba reiniciar el servidor, esto se hace normalmente con:

sudo /etc/init.d/apache2 restart

Pero al realizar dicha acción por consola, solo me salía el siguiente mensaje:

apache2: bad user name ${APACHE_RUN_USER}

La información extra:

  • SO: Ubuntu 9.10 karmic koala
  • Servidor: Apache/2.2.12 (Ubuntu)

Vamos al grano, para solucionar esto:

Necesitamos configurar un par de parámetros en el archivo apache2.conf (antiguamente httpd), lo hacemos con gedit, en consola:

sudo gedit /etc/apache2/apache2.conf

Luego buscamos las siguientes líneas:

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Y las modificamos con:

User www-data
Group www-data

Reiniciamos y la siguiente vez funcionarán normalmente las órdenes de apache.