adJ y OpenBSD incluyen en el sistema base dos servidores web: (1) una versión auditada de nginx 1.6.0 y (2) su propio OpenBSD httpd. En este capítulo detallamos la configuración y uso de cada uno, así como del paquete apache-httpd-openbsd que es el Apache 1.3.29 incluido hasta OpenBSD 5.5.
A continuación describimos algunos casos de uso
del nuevo httpd que soporta
contenido estático, FastCGI sin reescritura y SSL.
Sus fuentes se basan en las de relayd que fue introducido y madurado en OpenBSD desde la versión 4.1 (inicialmente llamado hoststated).
En el archivo /etc/rc.conf.local agregue:
httpd_flags=""
y en adJ agregue httpd a la variable pkg_scripts.
Se configura en el archivo /etc/httpd.conf cuya sintaxis tiene algunas similitudes con la de nginx y con la de relayd. Puede constar de 4 secciones: macros, configuraciones globales, uno o más servidores y tipos.
La sintaxis de la sección de tipos es idéntica a la de nginx y como puede usarse include para incluir otro archivo de configuración, el siguiente es un ejemplo mínimo (incluyendo el macro ext_ip):
ext_ip="200.201.202.203"
server "default" {
listen on $ext_ip port 80
}
include "/etc/nginx/mime.types"
Podría probarlo iniciando en modo de depuración con:
sudo httpd -vn
Y examinando con un navegador la URL
http://200.201.202.203, con lo que
vería el archivo /var/www/htdocs/index.html
y notaría que:
Debido a la opción listen on $ext_ip port 80 serviría por el puerto 80 de 200.201.202.203. En lugar de $ext_ip puede usar una interfaz o incluso un grupo como egress para servir en todas las interfaces conectadas a Internet.
Por defecto pondría una jaula chroot en /var/www. Esto podría modificarse en la sección de configuración, antes del primer server y después del macro con la opción chroot directorio
Iniciaría 3 procesos para servir páginas. Esto puede modificarse en la sección de configuración con la opción prefork numero
Que serviría los archivos de /var/www/htdocs. Esto puede modificarse agregando la opción root directorio_relativo_a_jaula dentro de la sección server.
Al ejemplo de configuración mínima anterior bastaría agregarle ssl a la opción listen e indicar el puerto 443, que es el asignado por defecto para HTTPS:
ext_ip="200.201.202.203"
server "default" {
listen on $ext_ip ssl port 443
}
include "/etc/nginx/mime.types"
El certificado que emplea por defecto es el par /etc/ssl/server.crt y /etc/ssl/private/server.key. Podría especificarse otro par con las opciones ssl certificate archivo y ssl key archivo dentro de la sección server.
Si la misma IP debe servir diversos dominios, cree una sección server por cada dominio con el nombre del dominio y emplee la misma opcion listen para todos y si es el caso directorios raices diferentes.
Si se configuraran los dominios www.miescuela.edu.co y www.otrodominio.co apuntando a la misma IP de los ejemplos anteriores y tiene las páginas de cada dominio en /var/www/htdocs/miescuela y /var/www/htdocs/otrodominio:
ext_ip="200.201.202.203"
server "www.miescuela.edu.co" {
listen on $ext_ip port 80
root /htdocs/miescuela
}
server "www.otrodominio.co" {
listen on $ext_ip port 80
root /htdocs/otrodominio
}
include "/etc/nginx/mime.types"
Es posible que sirva contenidos PHP usando php-fpm como FastCGI. Sin embargo debe asegurar haber aplicado los parches más recientes para 5.6 (ya incluidos en binarios de adJ) y tener en cuenta que no soporta, y posiblmente no soportará reescritura de URLs.
Una configuración mínima para SIVeL 1.2 que opere en 192.168.1.1, con archivos en /var/www/htdcos/sivel y con SSL es:
server "192.168.1.1" {
listen on egress ssl port 443
location "*.php" {
fastcgi socket "/run/php-fpm.sock"
}
root "/htdocs/sivel/"
include "/etc/nginx/mime.types"
}
Operará bien con la configuración por defecto de php-fpm, que puede instalar con:
sudo pkg_add php-fpm sudo cp /usr/local/share/examples/php-5.4/php-fpm.conf /etc/
e iniciar con:
sudo sh /etc/rc.d/php-fpm start
o mejor en cada arranque de su sistema editando /etc/rc.conf.local
y agregando
Agregar php_fpm_flags=""
A la variable pkg_scripts añadir php-fpm
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.
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.39. 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:
En index agregue
index.php
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;
}
adJ y OpenBSD cuentan con el porte de
transición apache-httpd-openbsd
con el Apache 1.3.29 modificado que había en
adJ/OpenBSD 5.5. Este porte será descontinuado
por lo que es importante usarlo como porte de
transito bien a OpenBSD httpd o a nginx o a
Apache2.
Instale el paquete:
sudo pkg_add apache-httpd-openbsd
En el archivo etc/rc.conf.local haga los siguientes cambios (parcialmente explicados en {2}):
# Renombre httpd_flags por apache_flags
# En la variable pkg_scripts remplace httpd por apache (y de requerirse saque nginx).
Modifique el archivo de configuración /var/www/conf/httpd.conf,
el cambio evidente es modificar la ruta de los módulos activos para que
sean cargados de /usr/local/lib/apache/ en
lugar de /usr/lib/apache
Puede probar reiniciar el servidor completo para asegurar que el Apache 1.3.29 arranca también, o bien iniciar sólo el servicio con:
sudo sh /etc/rc.d/apache start
Este porte 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:
apache_flags="-u"
Para detener el servidor una vez esté corriendo puede emplear:
# /etc/rc.d/apache stop
Para iniciarlo o reiniciarlo con las opciones que haya configurado
en /etc/rc.conf.local:
# /etc/rc.d/apache restart
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/
Empleado dominios virtuales (del inglés Virtual Hosting) es posible manejar con un mismo servidor diversas direcciones DNS. Para activarlo:
En /var/www/conf/httpd.conf no
emplee un alias para el directorio
/
Si ejecuta Apache con chroot copie
/usr/local/lib/apache/modules/mod_vhost_alias.so
en /var/www/usr/local/lib/apache/modules/
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>
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, 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:
sudo /etc/rc.d/apache restart
Finalmente puede probar abriendo desde un navegador
https://Jesus.miescuela.edu.co
Instale el paquete
php-5.4.39.
Después cree un enlace para activarlo en servidor web:
ln -s /var/www/conf/modules.sample/php-5.4.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/local/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(); ?>
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.39 y
ejecute:
ln -fs /etc/php-5.4.sample/pgsql.ini \ /etc/php-5.4/pgsql.ini
Puede comprobar que esta extensión funciona revisando
la salida de la función phpinfo().
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”
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.
Hay información completa sobre SSI en el manual de Apache http://httpd.apache.org/docs/howto/ssi.html