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 nginxSe 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.serviceEntã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-fpmAntes 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.confAltere as permissões do diretório de sessão do PHP:
chmod 1733 /var/lib/php5Entã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.servicePHP-FPM é um processo daemon que executa um servidor FastCGI na porta 9000, como você pode ver na saída de
netstat -tapnserver1:~ # 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-sysvshmAgora reinicie o PHP-FPM:
systemctl restart php-fpm.servicePara 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-develCrie 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 installIsso 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-fcgiAgora 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/fcgiwrapVocê 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 nginxRecarregue o nginx em seguida:
systemctl reload nginx.serviceSe 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 phpMyAdminComo isso instala o Apache como uma dependência, remova os links de inicialização do sistema do Apache:
systemctl disable apache2.serviceO 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/phpmyadminDepois 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.serviceEm 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-ftpdsystemctl enable pure-ftpd.service
systemctl start pure-ftpd.serviceAgora 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 opensslAbra /etc/pure-ftpd/pure-ftpd.conf…
vi /etc/pure-ftpd/pure-ftpd.confSe 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.pemNome 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.pemFinalmente, 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.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.