Nginx: Difference between revisions

From MoodleDocs
(Created page with "{{Instalando o Moodle}}Nginx (lê-se "engine x") é um servidor leve de HTTP, proxy reverso, proxy de e-mail IMAP/POP3, feito por Igor Sysoev em 2005, sob licença BSD-lik...")
 
No edit summary
Line 78: Line 78:
location /dataroot/ {
location /dataroot/ {
     internal;
     internal;
     alias <caminho-completo-do-diretório-moodledata>; # certifique-se que tenha um barra no final, exemplo: /var/www/moodledata/
     alias <caminho-completo-do-diretório-moodledata>; # certifique-se que tenha um barra no final, exemplo: alias /var/www/moodledata/
}
}
</pre>
</pre>

Revision as of 20:52, 12 November 2019

Nginx (lê-se "engine x") é um servidor leve de HTTP, proxy reverso, proxy de e-mail IMAP/POP3, feito por Igor Sysoev em 2005, sob licença BSD-like 2-clause. O projeto nginx começou com forte foco em alta carga de usuários concorrentes, alta performance e baixo consumo de memória. Roda no Linux, BSD e variantes, Mac OS X, Solaris, AIX, HP-UX, bem como em outras variações *nix.

A documentação a seguir é uma contribuição da comunidade sobre as configurações do Nginx. Alterações e adições são bem-vindas.

Configuração do Nginx

PHP-FPM

Nginx é comumente configurado para interagir com o PHP via php-fpm. Ambos rápidos e robustos.

O comportamento padrão para o PHP-FPM é, geralmente, de restringir a execução de scripts a uma extensão específica, por exemplo: .php. Você deve garantir que esse comportamento esteja configurado em seu sistema/distribuição, por exemplo, no Debian:

/etc/php5/fpm/pool.d/www.conf

security.limit_extensions = .php

Nginx

Você deve adicionar 'slash arguments' (saiba mais em 'Usando slash arguments') compatíveis ao bloco 'location' nas configurações do seu 'virtual host', dentro do bloco 'server' (localizado em /etc/nginx/sites-available/nome-do-arquivo-de-configuração-do-seu-virtual-host).

nginx.conf location:

location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info  ^(.+\.php)(/.+)$;
    fastcgi_index            index.php;
    fastcgi_pass             127.0.0.1:9000 (ou seu php-fpm socket, exemplo: unix:/var/run/php/php7.3-fpm.sock);
    include                  fastcgi_params;
    fastcgi_param   PATH_INFO       $fastcgi_path_info;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Caso o exemplo acima não funcione, tente o modelo a seguir.
Nota: Testado no CentOS 7.6 (1804), MariaDB 10.3, Nginx 1.15 and PHP 7.3.5

location ~ ^(.+\.php)(.*)$ {
    root /usr/share/nginx/html/moodle/;
    fastcgi_split_path_info  ^(.+\.php)(.*)$;
    fastcgi_index            index.php;
    fastcgi_pass             127.0.0.1:9000;
    include /etc/nginx/mime.types;
    include                  fastcgi_params;
    fastcgi_param   PATH_INFO       $fastcgi_path_info;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Exemplo de uso do Moodle em subpasta dentro do diretório principal do WordPress.
Nota: Testado no Ubuntu 18.04.3, PostgreSQL 11.5.3, Nginx/1.17.3 e PHP 7.3.11

location ^~ /moodle/ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param   PATH_INFO       $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_read_timeout 300;
   }


Se você perceber que isto não funcionou (scripts, styles, e imagens não estão carregando) e que há linhas com open() "..." failed (20: Not a directory) aparecendo em seus logs: Verifique se existem diretivas relacionadas ao conteúdo estático antes do bloco 'location' apresentado nesta documentação e tente movê-las para depois deste bloco.


XSendfile vulgo X-Accel-Redirect

Configurar o Moodle e Nginx para utilizar a funcionalidade XSendfile representa um grande ganho, uma vez que libera o PHP da função de entrega de arquivos e permite ao Nginx fazer o que ele faz de melhor, entregar arquivos.

Ative o xsendfile para Nginx no arquivo config.php do Moodle. O processo está documentado no arquivo config-dist.php. Uma configuração mínima é semelhante ao apresentado a seguir:

$CFG->xsendfile = 'X-Accel-Redirect';
$CFG->xsendfilealiases = array(
    '/dataroot/' => $CFG->dataroot
);

Configure, também, no seu 'virtual host' um bloco 'location' conforme o exemplo a seguir:

location /dataroot/ {
    internal;
    alias <caminho-completo-do-diretório-moodledata>; # certifique-se que tenha um barra no final, exemplo: alias /var/www/moodledata/
}

A definição 'internal' é crítica, uma vez que previne que o usuário acesse seu diretório 'dataroot'.