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 nginxSi 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.serviceLuego 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-fpmAntes 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.confCambie los permisos del directorio de sesiones de PHP:
chmod 1733 /var/lib/php5Luego 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.servicePHP-FPM es un proceso daemon que ejecuta un servidor FastCGI en el puerto 9000, como puede ver en la salida de
netstat -tapnserver1:~ # 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-sysvshmAhora reinicie PHP-FPM:
systemctl restart php-fpm.servicePara 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-develCree 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 installEsto 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-fcgiAhora 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/fcgiwrapAhora 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 nginxRecargue nginx después:
systemctl reload nginx.serviceSi 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 phpMyAdminComo esto instala Apache como una dependencia, elimine los enlaces de inicio del sistema de Apache:
systemctl disable apache2.servicephpMyAdmin 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/phpmyadminDespué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.serviceLuego 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-ftpdsystemctl enable pure-ftpd.service
systemctl start pure-ftpd.serviceAhora 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 opensslAbra /etc/pure-ftpd/pure-ftpd.conf…
vi /etc/pure-ftpd/pure-ftpd.confSi 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.pemNombre 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.pemFinalmente, reinicie PureFTPd:
systemctl restart pure-ftpd.serviceEso 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.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.