Servidor Perfeito · 10 min read · Sep 13, 2025

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

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

Nginx está disponível como um pacote para OpenSUSE que podemos instalar da seguinte forma:

zypper install nginx

Se o Apache2 já estiver instalado no sistema, pare-o agora…

systemctl stop apache2.service

… e remova os links de inicialização do sistema do Apache:

systemctl disable apache2.service

Então, criamos os links de inicialização do sistema para o nginx e o iniciamos:

systemctl enable nginx.service  
systemctl start nginx.service

(Se tanto o Apache2 quanto o nginx estiverem instalados, o instalador do ISPConfig 3 perguntará qual você deseja usar - responda nginx neste caso. Se apenas um desses dois estiver instalado, o ISPConfig fará a configuração necessária automaticamente.)

Se você quiser usar endereços IPv6 com seus vhosts nginx, por favor, faça o seguinte antes de criar vhosts IPv6 no ISPConfig:

Abra /etc/sysctl.conf…

vi /etc/sysctl.conf

… e adicione a linha net.ipv6.bindv6only = 1:

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

Execute…

sysctl -p

… depois para que a mudança tenha efeito.

Podemos fazer o PHP5 funcionar no nginx através do PHP-FPM (PHP-FPM (FastCGI Process Manager) é uma implementação alternativa do PHP FastCGI com alguns recursos adicionais úteis para sites de qualquer tamanho, especialmente sites mais movimentados) que instalamos da seguinte forma:

zypper install php5-fpm

Antes de iniciarmos o PHP-FPM, renomeie /etc/php5/fpm/php-fpm.conf.default para /etc/php5/fpm/php-fpm.conf:

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

Altere as permissões do diretório de sessão do PHP:

chmod 1733 /var/lib/php5

Então abra /etc/php5/fpm/php-fpm.conf…

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

… e mude error_log para /var/log/php-fpm.log:

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

Não há arquivo php.ini para PHP-FPM no OpenSUSE 12.3, portanto, copiamos o php.ini do CLI:

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

Em seguida, abra /etc/php5/fpm/php.ini…

vi /etc/php5/fpm/php.ini

… e defina cgi.fix_pathinfo como 0:

| [...] ; cgi.fix_pathinfo fornece suporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. O comportamento anterior do PHP era definir PATH_TRANSLATED como SCRIPT_FILENAME, e não entender o que é PATH_INFO. Para mais informações sobre PATH_INFO, veja as especificações do cgi. Definir isso como 1 fará com que o PHP CGI corrija seus caminhos para se conformar à especificação. Um valor de zero faz com que o PHP se comporte como antes. O padrão é 1. Você deve corrigir seus scripts para usar SCRIPT_FILENAME em vez de PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

Em seguida, crie os links de inicialização do sistema para o php-fpm e reinicie-o:

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

PHP-FPM é um processo daemon que executa um servidor FastCGI na porta 9000, como você pode ver na saída de

netstat -tapn
server1:~ # netstat -tapn  
 Conexões Internet ativas (servidores e estabelecidas)  
 Proto Recv-Q Send-Q Endereço Local           Endereço Estrangeiro         Estado       PID/Nome do 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 obter suporte ao MySQL no PHP, podemos instalar o pacote php5-mysql. É uma boa ideia instalar alguns outros módulos do PHP5, pois você pode precisar deles para suas aplicações:

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

Agora reinicie o PHP-FPM:

systemctl restart php-fpm.service

Para obter suporte a CGI no nginx, instalamos o Fcgiwrap.

Fcgiwrap é um wrapper CGI que deve funcionar também para scripts CGI complexos e pode ser usado para ambientes de hospedagem compartilhada porque permite que cada vhost use seu próprio diretório cgi-bin.

Como não há pacote fcgiwrap para OpenSUSE, devemos construí-lo nós mesmos. Primeiro, instalamos alguns pré-requisitos:

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

Crie os seguintes links 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/

Agora podemos construir o fcgiwrap da seguinte forma:

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

Isso instala o fcgiwrap em /usr/local/sbin/fcgiwrap.

Em seguida, instalamos o pacote spawn-fcgi que nos permite executar o fcgiwrap como um daemon:

zypper install spawn-fcgi

Agora podemos iniciar o fcgiwrap da seguinte forma:

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

Você agora deve encontrar o socket do fcgiwrap em /var/run/fcgiwrap.socket, pertencente ao usuário wwwrun e ao grupo www. Agora devemos adicionar o usuário nginx ao grupo www:

usermod -a -G www nginx

Recarregue o nginx em seguida:

systemctl reload nginx.service

Se você não quiser iniciar o fcgiwrap manualmente toda vez que iniciar seu sistema, abra /etc/init.d/boot.local…

vi /etc/init.d/boot.local

… e adicione o comando spawn-fcgi no final do arquivo - isso iniciará automaticamente o fcgiwrap ao final do processo de inicialização:

| [...] /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 |

É isso! Agora, quando você criar um vhost nginx, o ISPConfig cuidará da configuração correta do vhost.

10.1 Instalar phpMyAdmin

Em seguida, instalamos o phpMyAdmin:

zypper install phpMyAdmin

Como isso instala o Apache como uma dependência, remova os links de inicialização do sistema do Apache:

systemctl disable apache2.service

O phpMyAdmin agora está localizado no diretório /srv/www/htdocs/phpMyAdmin, mas queremos que ele esteja no diretório /usr/share/phpmyadmin/, então criamos um link simbólico:

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

Depois de instalar o ISPConfig 3, você pode acessar o phpMyAdmin da seguinte forma:

O vhost de aplicativos do ISPConfig na porta 8081 para nginx vem com uma configuração do phpMyAdmin, então você pode usar http://server1.example.com:8081/phpmyadmin ou http://server1.example.com:8081/phpMyAdmin para acessar o phpMyAdmin.

Se você quiser usar um alias /phpmyadmin ou /phpMyAdmin que você possa usar de seus sites, isso é um pouco mais complicado do que para o Apache porque o nginx não tem aliases globais (ou seja, aliases que podem ser definidos para todos os vhosts). Portanto, você deve definir esses aliases para cada vhost do qual deseja acessar o phpMyAdmin.

Para fazer isso, cole o seguinte no campo Diretrizes do nginx na aba Opções do site no 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; } |

Se você usar http s em vez de http para seu vhost, deve adicionar a linha fastcgi_param HTTPS on; à sua configuração do phpMyAdmin assim:

| 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; # <-- adicione esta linha 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; } |

Se você usar tanto http quanto https para seu vhost, precisa adicionar a seguinte seção à seção http {} em /etc/nginx/nginx.conf (antes de qualquer linha de inclusão) que determina se o visitante usa http ou https e define a variável $fastcgi_https (que usaremos em nossa configuração do phpMyAdmin) de acordo:

vi /etc/nginx/nginx.conf

| [...] http { [...] ## Detectar quando HTTPS é usado map $scheme $fastcgi_https { default off; https on; } [...] } [...] |

Não se esqueça de recarregar o nginx depois:

systemctl reload nginx.service

Em seguida, vá novamente para o campo Diretrizes do nginx e, em vez de fastcgi_param HTTPS on;, você adiciona a linha fastcgi_param HTTPS $fastcgi_https; para que você possa usar o phpMyAdmin para solicitações http e 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; # <-- adicione esta linha 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 o daemon FTP pure-ftpd. Execute:

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

Agora configuramos o PureFTPd para permitir sessões FTP e TLS. O FTP é um protocolo muito inseguro porque todas as senhas e todos os dados são transferidos em texto claro. Ao usar TLS, toda a comunicação pode ser criptografada, tornando o FTP muito mais seguro.

OpenSSL é necessário pelo TLS; para instalar o OpenSSL, simplesmente executamos:

zypper install openssl

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

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

Se você quiser permitir sessões FTP e TLS, defina TLS como 1:

| [...] # Esta opção pode aceitar três valores : # 0 : desativar a camada de criptografia SSL/TLS (padrão). # 1 : aceitar sessões tradicionais e criptografadas. # 2 : recusar conexões que não usam mecanismos de segurança SSL/TLS, # incluindo sessões anônimas. # Não descomente isso cegamente. Certifique-se de que : # 1) Seu servidor foi compilado com suporte a SSL/TLS (--with-tls), # 2) Um certificado válido está em vigor, # 3) Apenas clientes compatíveis farão login. TLS 1 [...] |

Se você quiser aceitar apenas sessões TLS (sem FTP), defina TLS como 2:

| [...] # Esta opção pode aceitar três valores : # 0 : desativar a camada de criptografia SSL/TLS (padrão). # 1 : aceitar sessões tradicionais e criptografadas. # 2 : recusar conexões que não usam mecanismos de segurança SSL/TLS, # incluindo sessões anônimas. # Não descomente isso cegamente. Certifique-se de que : # 1) Seu servidor foi compilado com suporte a SSL/TLS (--with-tls), # 2) Um certificado válido está em vigor, # 3) Apenas clientes compatíveis farão login. TLS 2 [...] |

Para não permitir TLS de forma alguma (apenas FTP), defina TLS como 0:

| [...] # Esta opção pode aceitar três valores : # 0 : desativar a camada de criptografia SSL/TLS (padrão). # 1 : aceitar sessões tradicionais e criptografadas. # 2 : recusar conexões que não usam mecanismos de segurança SSL/TLS, # incluindo sessões anônimas. # Não descomente isso cegamente. Certifique-se de que : # 1) Seu servidor foi compilado com suporte a SSL/TLS (--with-tls), # 2) Um certificado válido está em vigor, # 3) Apenas clientes compatíveis farão login. TLS 0 [...] |

Para usar TLS, devemos criar um certificado SSL. Eu o crio em /etc/ssl/private/, portanto, primeiro crio esse diretório:

mkdir -p /etc/ssl/private/

Depois, podemos gerar o certificado SSL da seguinte forma:

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

Nome do País (código de 2 letras) [AU]: <– Insira o Nome do seu País (por exemplo, “DE”).
Nome do Estado ou Província (nome completo) [Some-State]: <– Insira o Nome do seu Estado ou Província.
Nome da Localidade (ex: cidade) []: <– Insira sua Cidade.
Nome da Organização (ex: empresa) [Internet Widgits Pty Ltd]: <– Insira o Nome da sua Organização (por exemplo, o nome da sua empresa).
Nome da Unidade Organizacional (ex: seção) []: <– Insira o Nome da sua Unidade Organizacional (por exemplo, “Departamento de TI”).
Nome Comum (ex: SEU nome) []: <– Insira o Nome de Domínio Totalmente Qualificado do sistema (por exemplo, “server1.example.com”).
Endereço de E-mail []: <– Insira seu Endereço de E-mail.

Altere as permissões do certificado SSL:

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

Finalmente, reinicie o PureFTPd:

systemctl restart pure-ftpd.service

É isso. Agora você pode tentar se conectar usando seu cliente FTP; no entanto, você deve configurar seu cliente FTP para usar TLS - veja o próximo capítulo sobre como fazer isso com o FileZilla.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.