Servidor Perfecto · 10 min read · Sep 13, 2025

El Servidor Perfecto - OpenSUSE 12.3 x86_64 (nginx, Dovecot, ISPConfig 3) - Página 4

10 Instalar Nginx, PHP5 (PHP-FPM) y Fcgiwrap

Nginx está disponible como un paquete para OpenSUSE que podemos instalar de la siguiente manera:

zypper install nginx

Si Apache2 ya está instalado en el sistema, deténgalo ahora…

systemctl stop apache2.service

… y elimine los enlaces de inicio del sistema de Apache:

systemctl disable apache2.service

Luego creamos los enlaces de inicio del sistema para nginx y lo iniciamos:

systemctl enable nginx.service  
systemctl start nginx.service

(Si tanto Apache2 como nginx están instalados, el instalador de ISPConfig 3 le preguntará cuál desea usar; responda nginx en este caso. Si solo uno de estos dos está instalado, ISPConfig hará la configuración necesaria automáticamente.)

Si desea usar direcciones IPv6 con sus vhosts de nginx, por favor haga lo siguiente antes de crear vhosts IPv6 en ISPConfig:

Abra /etc/sysctl.conf…

vi /etc/sysctl.conf

… y agregue la línea net.ipv6.bindv6only = 1:

| [...] net.ipv6.bindv6only = 1 |

Ejecute…

sysctl -p

… después para que el cambio tenga efecto.

Podemos hacer que PHP5 funcione en nginx a través de PHP-FPM (PHP-FPM (FastCGI Process Manager) es una implementación alternativa de PHP FastCGI con algunas características adicionales útiles para sitios de cualquier tamaño, especialmente sitios más concurridos) que instalamos de la siguiente manera:

zypper install php5-fpm

Antes de iniciar PHP-FPM, renombre /etc/php5/fpm/php-fpm.conf.default a /etc/php5/fpm/php-fpm.conf:

mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

Cambie los permisos del directorio de sesiones de PHP:

chmod 1733 /var/lib/php5

Luego abra /etc/php5/fpm/php-fpm.conf…

vi /etc/php5/fpm/php-fpm.conf

… y cambie error_log a /var/log/php-fpm.log:

| [...] error_log = /var/log/php-fpm.log [...] |

No hay un archivo php.ini para PHP-FPM bajo OpenSUSE 12.3, por lo tanto, copiamos el php.ini de CLI:

cp /etc/php5/cli/php.ini /etc/php5/fpm/

A continuación, abra /etc/php5/fpm/php.ini…

vi /etc/php5/fpm/php.ini

… y establezca cgi.fix_pathinfo en 0:

| [...] ; cgi.fix_pathinfo proporciona soporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. PHP's ; el comportamiento anterior era establecer PATH_TRANSLATED en SCRIPT_FILENAME, y no entender ; qué es PATH_INFO. Para más información sobre PATH_INFO, consulte las especificaciones de cgi. Establecer ; esto en 1 hará que PHP CGI corrija sus rutas para conformarse a la especificación. Un ajuste ; de cero hace que PHP se comporte como antes. El valor predeterminado es 1. Debería corregir sus scripts ; para usar SCRIPT_FILENAME en lugar de PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

A continuación, cree los enlaces de inicio del sistema para php-fpm y reinícielo:

systemctl enable php-fpm.service  
systemctl restart php-fpm.service

PHP-FPM es un proceso daemon que ejecuta un servidor FastCGI en el puerto 9000, como puede ver en la salida de

netstat -tapn
server1:~ # netstat -tapn  
 Conexiones de Internet activas (servidores y establecidas)  
 Proto Recv-Q Send-Q Dirección Local           Dirección Extranjera         Estado       PID/Nombre del Programa  
 tcp        0      0 127.0.0.1:3310          0.0.0.0:*               LISTEN      10357/clamd  
 tcp        0      0 0.0.0.0:143            0.0.0.0:*               LISTEN      9869/dovecot  
 tcp        0      0 0.0.0.0:80             0.0.0.0:*               LISTEN      10521/nginx  
 tcp        0      0 0.0.0.0:22             0.0.0.0:*               LISTEN      1275/sshd  
 tcp        0      0 127.0.0.1:25           0.0.0.0:*               LISTEN      9816/master  
 tcp        0      0 127.0.0.1:9000         0.0.0.0:*               LISTEN      10695/php-fpm.conf)  
 tcp        0      0 127.0.0.1:10024        0.0.0.0:*               LISTEN      10337/amavisd (mast  
 tcp        0      0 0.0.0.0:3306           0.0.0.0:*               LISTEN      9694/mysqld  
 tcp        0      0 192.168.0.100:22       192.168.0.199:4630      ESTABLISHED 1332/0  
 tcp        0      0 :::22                   :::*                     LISTEN      1275/sshd  
 tcp        0      0 ::1:25                 :::*                     LISTEN      9816/master  
 server1:~ #

Para obtener soporte de MySQL en PHP, podemos instalar el paquete php5-mysql. Es una buena idea instalar algunos otros módulos de PHP5 también, ya que puede que los necesite para sus aplicaciones:

zypper install php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshm

Ahora reinicie PHP-FPM:

systemctl restart php-fpm.service

Para obtener soporte CGI en nginx, instalamos Fcgiwrap.

Fcgiwrap es un envoltorio CGI que también debería funcionar para scripts CGI complejos y puede ser utilizado para entornos de alojamiento compartido porque permite que cada vhost use su propio directorio cgi-bin.

Como no hay un paquete fcgiwrap para OpenSUSE, debemos construirlo nosotros mismos. Primero instalamos algunos requisitos previos:

zypper install git patch automake glibc-devel gcc flex compat-readline4 db-devel wget gcc-c++ make vim libtool FastCGI-devel

Cree los siguientes enlaces simbólicos:

ln -s /usr/include/fastcgi/fastcgi.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_config.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_stdio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgiapp.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgimisc.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgios.h /usr/local/include/

Ahora podemos construir fcgiwrap de la siguiente manera:

cd /usr/local/src/  
git clone git://github.com/gnosek/fcgiwrap.git  
cd fcgiwrap  
autoreconf -i  
./configure  
make  
make install

Esto instala fcgiwrap en /usr/local/sbin/fcgiwrap.

A continuación, instalamos el paquete spawn-fcgi que nos permite ejecutar fcgiwrap como un daemon:

zypper install spawn-fcgi

Ahora podemos iniciar fcgiwrap de la siguiente manera:

spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap

Ahora debería encontrar el socket de fcgiwrap en /var/run/fcgiwrap.socket, propiedad del usuario wwwrun y del grupo www. Ahora debemos agregar el usuario nginx al grupo www:

usermod -a -G www nginx

Recargue nginx después:

systemctl reload nginx.service

Si no desea iniciar fcgiwrap manualmente cada vez que inicie su sistema, abra /etc/init.d/boot.local…

vi /etc/init.d/boot.local

… y agregue el comando spawn-fcgi al final del archivo; esto iniciará automáticamente fcgiwrap al final del proceso de arranque:

| [...] /usr/bin/spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap |

¡Eso es todo! Ahora, cuando cree un vhost de nginx, ISPConfig se encargará de la configuración correcta del vhost.

10.1 Instalar phpMyAdmin

A continuación, instalamos phpMyAdmin:

zypper install phpMyAdmin

Como esto instala Apache como una dependencia, elimine los enlaces de inicio del sistema de Apache:

systemctl disable apache2.service

phpMyAdmin ahora se encuentra en el directorio /srv/www/htdocs/phpMyAdmin, pero lo queremos en el directorio /usr/share/phpmyadmin/, así que creamos un enlace simbólico:

ln -s /srv/www/htdocs/phpMyAdmin /usr/share/phpmyadmin

Después de haber instalado ISPConfig 3, puede acceder a phpMyAdmin de la siguiente manera:

La aplicación vhost de ISPConfig en el puerto 8081 para nginx viene con una configuración de phpMyAdmin, por lo que puede usar http://server1.example.com:8081/phpmyadmin o http://server1.example.com:8081/phpMyAdmin para acceder a phpMyAdmin.

Si desea usar un alias /phpmyadmin o /phpMyAdmin que pueda usar desde sus sitios web, esto es un poco más complicado que para Apache porque nginx no tiene alias globales (es decir, alias que se pueden definir para todos los vhosts). Por lo tanto, debe definir estos alias para cada vhost desde el cual desea acceder a phpMyAdmin.

Para hacer esto, pegue lo siguiente en el campo Directivas de nginx en la pestaña Opciones del sitio web en ISPConfig:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

Si usa http s en lugar de http para su vhost, debe agregar la línea fastcgi_param HTTPS on; a su configuración de phpMyAdmin de la siguiente manera:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS on; # <-- agregue esta línea fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

Si usa tanto http como https para su vhost, necesita agregar la siguiente sección a la sección http {} en /etc/nginx/nginx.conf (antes de cualquier línea de inclusión) que determina si el visitante usa http o https y establece la variable $fastcgi_https (que usaremos en nuestra configuración de phpMyAdmin) en consecuencia:

vi /etc/nginx/nginx.conf

| [...] http { [...] ## Detectar cuándo se usa HTTPS map $scheme $fastcgi_https { default off; https on; } [...] } [...] |

No olvide recargar nginx después:

systemctl reload nginx.service

Luego vuelva al campo Directivas de nginx, y en lugar de fastcgi_param HTTPS on; agregue la línea fastcgi_param HTTPS $fastcgi_https; para que pueda usar phpMyAdmin para solicitudes tanto http como https:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS $fastcgi_https; # <-- agregue esta línea fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

11 Instalar PureFTPd

Instale el daemon FTP pure-ftpd. Ejecute:

zypper install pure-ftpd
systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

Ahora configuramos PureFTPd para permitir sesiones FTP y TLS. FTP es un protocolo muy inseguro porque todas las contraseñas y todos los datos se transfieren en texto claro. Al usar TLS, toda la comunicación puede ser cifrada, haciendo que FTP sea mucho más seguro.

OpenSSL es necesario para TLS; para instalar OpenSSL, simplemente ejecutamos:

zypper install openssl

Abra /etc/pure-ftpd/pure-ftpd.conf…

vi /etc/pure-ftpd/pure-ftpd.conf

Si desea permitir sesiones FTP y TLS, establezca TLS en 1:

| [...] # Esta opción puede aceptar tres valores : # 0 : deshabilitar la capa de cifrado SSL/TLS (predeterminado). # 1 : aceptar tanto sesiones tradicionales como cifradas. # 2 : rechazar conexiones que no utilizan mecanismos de seguridad SSL/TLS, # incluidas sesiones anónimas. # No descomente esto a ciegas. Asegúrese de que : # 1) Su servidor ha sido compilado con soporte SSL/TLS (--with-tls), # 2) Un certificado válido está en su lugar, # 3) Solo los clientes compatibles iniciarán sesión. TLS 1 [...] |

Si desea aceptar solo sesiones TLS (sin FTP), establezca TLS en 2:

| [...] # Esta opción puede aceptar tres valores : # 0 : deshabilitar la capa de cifrado SSL/TLS (predeterminado). # 1 : aceptar tanto sesiones tradicionales como cifradas. # 2 : rechazar conexiones que no utilizan mecanismos de seguridad SSL/TLS, # incluidas sesiones anónimas. # No descomente esto a ciegas. Asegúrese de que : # 1) Su servidor ha sido compilado con soporte SSL/TLS (--with-tls), # 2) Un certificado válido está en su lugar, # 3) Solo los clientes compatibles iniciarán sesión. TLS 2 [...] |

Para no permitir TLS en absoluto (solo FTP), establezca TLS en 0:

| [...] # Esta opción puede aceptar tres valores : # 0 : deshabilitar la capa de cifrado SSL/TLS (predeterminado). # 1 : aceptar tanto sesiones tradicionales como cifradas. # 2 : rechazar conexiones que no utilizan mecanismos de seguridad SSL/TLS, # incluidas sesiones anónimas. # No descomente esto a ciegas. Asegúrese de que : # 1) Su servidor ha sido compilado con soporte SSL/TLS (--with-tls), # 2) Un certificado válido está en su lugar, # 3) Solo los clientes compatibles iniciarán sesión. TLS 0 [...] |

Para usar TLS, debemos crear un certificado SSL. Lo creo en /etc/ssl/private/, por lo tanto, primero creo ese directorio:

mkdir -p /etc/ssl/private/

Después, podemos generar el certificado SSL de la siguiente manera:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Nombre del País (código de 2 letras) [AU]: <– Ingrese el Nombre de su País (por ejemplo, “DE”).
Nombre del Estado o Provincia (nombre completo) [Some-State]: <– Ingrese el Nombre de su Estado o Provincia.
Nombre de la Localidad (por ejemplo, ciudad) []: <– Ingrese su Ciudad.
Nombre de la Organización (por ejemplo, empresa) [Internet Widgits Pty Ltd]: <– Ingrese el Nombre de su Organización (por ejemplo, el nombre de su empresa).
Nombre de la Unidad Organizativa (por ejemplo, sección) []: <– Ingrese su Nombre de Unidad Organizativa (por ejemplo, “Departamento de TI”).
Nombre Común (por ejemplo, SU nombre) []: <– Ingrese el Nombre de Dominio Totalmente Calificado del sistema (por ejemplo, “server1.example.com”).
Dirección de Correo Electrónico []: <– Ingrese su Dirección de Correo Electrónico.

Cambie los permisos del certificado SSL:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Finalmente, reinicie PureFTPd:

systemctl restart pure-ftpd.service

Eso es todo. Ahora puede intentar conectarse usando su cliente FTP; sin embargo, debe configurar su cliente FTP para usar TLS; consulte el siguiente capítulo sobre cómo hacer esto con FileZilla.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.