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