7. Servidor Web

OpenBSD incluye dos servidores web: (1) una versión auditada de Apache 1.3.29 y (2) una versión auditada de nginx. En este capítulo detallamos la configuración y uso de cada uno.

7.1. Apache

OpenBSD incluye una versión auditada de Apache como parte de los componentes básicos. Para activarla sin soporte para SSL agregue la siguiente línea en /etc/rc.conf.local:

httpd_flags="" 

A partir de OpenBSD 3.3, Apache corre por defecto y para mayor seguridad con chroot en /var/www. Es decir que desde el punto de vista de Apache la raíz del sistema es lo que hay en /var/www. Diversos portes o sus aplicaciones pueden requerir que Apache tenga acceso a otras partes del sistema, aunque no lo recomendamos puede lograrlo iniciando con el flag:

httpd_flags="-u" 

Para detener el servidor una vez esté corriendo puede emplear:

# apachectl stop

Para iniciarlo o reiniciarlo con las opciones que haya configurado en /etc/rc.conf.local:

# . /etc/rc.conf
# httpd $httpd_flags
	

O mejor ejecutando sh /etc/rc.local, pero si ha preparado este archivo para reiniciar servicios faltantes, por ejemplo agregando al comienzo:

. /etc/rc.conf
	

y después de la inicialización de otros servicios:

pgrep httpd > /dev/null
if [ "$?" != "0" -a X"$httpd_flags" != X"NO" ]; then 
	httpd $httpd_flags
fi
	

7.1.1. Directorios para usuarios

El archivo de configuración por defecto (/var/www/conf/httpd.conf) no incluye directorios para usuarios. A partir de OpenBSD 3.4 se recomienda que estos directorios se creen en /var/www/users, los activa estableciendo en el archivo de configuración:

UserDir /users 

o bien

UserDir /var/www/users 

el primer en caso de que corra Apache chroot y el segundo si no. En ambos casos se sugiere la siguiente secuencia para crear un directorio de publicación para el usuario pablo:

# cd /home/pablo
# mkdir /var/www/users/pablo
# ln -s /var/www/users/pablo public_html
# chown pablo:pablo /var/www/users/pablo
	

Así el usuario podrá publicar sus archivos en su subdirectorio public_html (como ocurre clásicamente) y desde un navegador local podrán verse con el URL: http://localhost/~pablo/ o remotamente con http://www.miescuela.edu.co/~pablo/

7.1.2. Dominios virtuales

Empleado dominios virtuales (del inglés Virtual Hosting) es posible manejar con un mismo servidor diversas direcciones DNS. Para activarlo:

  1. En /var/www/conf/httpd.conf no emplee un alias para el directorio /

  2. Si ejecuta Apache con chroot copie /usr/lib/apache/modules/mod_vhost_alias.so en /var/www/usr/lib/apache/modules/

  3. Agregue en /var/www/conf/httpd.conf una línea del estilo:

    NameVirtualHost 65.167.3.4
    		

    remplazando la IP por la de su servidor

    Agregue un dominio virtual por cada dominio que maneje, por ejemplo:

    <VirtualHost 65.167.63.234>
        ServerAdmin pablo@miescuela.edu.co
        DocumentRoot /var/www/htdocs
        ServerName www.miescuela.edu.co
        ServerAlias miescuela.edu.co
        ErrorLog logs/miescuela.edu.co-error_log
        Options ExecCgi Includes MultiViews Indexes FollowSymlinks 
        SymLinksIfOwnerMatch
        CustomLog logs/miescuela.edu.co-access_log common
    </VirtualHost>
    		

7.1.3. SSL

Para emplear SSL con Apache pueden seguirse las instrucciones del FAQ de OpenBSD que se retoman a continuación. Debe generar un certificado que pueda ser firmado por una Autoridad Certificadora o por usted mismo.

# openssl genrsa -out /etc/ssl/private/server.key 1024
# openssl req -new -key /etc/ssl/private/server.key \
       -out /etc/ssl/private/server.csr

Tras el segundo paso debe ingresar el código del país (co para Colombia), el departamento en el que está, la organización, la unidad dentro de la organización y el nombre común (e.g la dirección web).

Después puede enviar el archivo /etc/ssl/private/server.csr a una entidad certificadora (e.g http://www.pasosdeJesus.org/index.php?pag=autoridad_certificadora), la entidad certificadora la devolverá su certificado firmado (digamos sudominio.pem) el cual debe ubicar en /etc/ssl/server.crt. Si prefiere firmar usted mismo su certificado emplee:

openssl x509 -req -days 3650 -in /etc/ssl/private/server.csr \
      -signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt

A continuación puede

  • agregar entre las opciones de Apache -DSSL en /etc/rc.conf.local

  • modificar /var/www/conf/httpd.conf para que al usar SSL se redireccione al directorio apropiado (digamos /var/www/users/sivel/), i.e. remplazando algunas líneas de la sección <VirtualHost _default_:443>:

    	DocumentRoot /var/www/users/sivel
    	ServerName miServidor
    	ServerAdmin micorreo@midominio.org
    	ErrorLog logs/error_log
    	TransferLog logs/access_log
    

  • Reiniciar el servidor con las opciones apropiadas, por ejemplo:

    # apachectl stop
    # /usr/sbin/httpd -DSSL
    

Finalmente puede probar abriendo desde un navegador https://Jesus.miescuela.edu.co

7.1.4. PHP

Instale el paquete php-5.4.24. Después cree un enlace para activarlo en servidor web:

ln -s /var/www/conf/modules.sample/php-5.2.conf \
	/var/www/conf/modules/php.conf
	  

y asegúrese de que las siguientes líneas estén en /var/www/conf/httpd.conf:

LoadModule php5_module /usr/lib/apache/modules/libphp5.so

AddType application/x-httpd-php .php

DirectoryIndex index.html index.php
	  

Reinicie Apache y pruebe la instalación de PHP por ejemplo cargando desde un navegador un archivo prueba.php el cual debe tener el siguiente contenido:

<?php
  phpinfo();
?>
	  

7.1.4.1. Soporte para PostgreSQL en PHP

Para activar el soporte para PostgreSQL (ver Sección 2, “Motor de bases de datos PostgreSQL”en PHP instale el paquete php-pgsql-5.4.24 y ejecute:

ln -fs /etc/php-5.2.sample/pgsql.ini \
	/etc/php-5.2/pgsql.ini
	    

Puede comprobar que esta extensión funciona revisando la salida de la función phpinfo().

7.1.4.2. Lecturas recomendadas

Puede aprender sobre PHP en http://www.php.net

La configuración de PHP con PostgreSQL y Apache corriendo con chroot puede verse en http://www.bsdforen.org/foren/showtopic.php?threadid=773 o en la sección sobre PostgreSQL de estas guías (ver Sección 2, “Motor de bases de datos PostgreSQL”

7.1.5. Server Side Include

El Apache incluido en OpenBSD tiene compilado como módulo estático mod_include.c (como puede comprobarse ejecutando /usr/sbin/httpd -l). Por esto para activar SSI basta quitar los comentarios de las siguientes líneas en /var/www/conf/httpd.conf:

AddType text/html .shtml
AddHandler server-parsed .shtml
		

y en el directorio o directorios desde los que se quieren usar páginas con SSI (extensión .shtml), agregar entre las opciones:

Option Includes
		

Si se desea que las páginas con extensión .html sean reconocidas por el servidor, de forma que puedan incluir directivas SSI, deles permiso de ejecución y agregué después del AddHandler antes mencionado:

XBitHack on
		

Tras reiniciar apache puede probar creando una página prueba.shtml por ejemplo con:

<html>
	<head><title></title></head>
	<body>
		<!--#echo var="DATE_LOCAL" -->
	</body>
</html> 
		

Al abrirla debe presentar la fecha y hora del sistema.

7.1.5.1. Lecturas recomendadas

Hay información completa sobre SSI en el manual de Apache http://httpd.apache.org/docs/howto/ssi.html

7.2. Nginx

OpenBSD y adJ incluyen nginx también entre los componentes básicos. Su archivo de configuración es /etc/nginx/nginx.conf. Por defecto correra en una jaula en /var/www, puede iniciarlo manualmente con:

/etc/rc.d/nginx start
		      

y detenerlo con

/etc/rc.d/nginx stop
		      

Para que inicie automáticamente en cada arranque basta agregar en /etc/rc.conf.local:

nginx_flags=""
		      

y que añada nginx en pkg_scripts.

7.2.1. Uso de PHP con nginx

No hay un módulo para PHP pero puede ejecutarse como Fast-CGI. Esto puede lograrse por ejemplo con el paquete php-fpm-5.4.24. Este paquete incluye un servicio que se configura en /etc/php-fpm.conf y que por defecto servirá en el puerto 9000. Inicielo con

	sudo sh /etc/rc.d/php-fpm start

o de manera permanente en cada arranque agregue php-fpm en pkg_scripts en /etc/rc.conf.local. En el archivo de configuración de nginx agregue en la sección server donde servirá Apache:

  1. En index agregue index.php

  2. Adicione:

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }