Nginx: Difference between revisions

From MoodleDocs
mNo edit summary
mNo edit summary
Line 31: Line 31:


Caso o exemplo acima não funcione, tente o modelo a seguir.<br />
Caso o exemplo acima não funcione, tente o modelo a seguir.<br />
Nota: Testado no CentOS 7.6 (1804), MariaDB 10.3, Nginx 1.15 and PHP 7.3.5
Nota: Testado no CentOS 7.6 (1804), MariaDB 10.3, Nginx 1.15 e PHP 7.3.5
<pre>
<pre>
location ~ ^(.+\.php)(.*)$ {
location ~ ^(.+\.php)(.*)$ {
Line 45: Line 45:
</pre>
</pre>


Exemplo de uso do Moodle em '''subpasta''' dentro do diretório principal do WordPress.<br />
Exemplo de uso do Moodle em '''subpasta''', dentro do diretório principal do WordPress.<br />
Nota: Testado no Ubuntu 18.04.3, PostgreSQL 11.5.3, Nginx/1.17.3 e PHP 7.3.11
Nota: Testado no Ubuntu 18.04.3, PostgreSQL 11.5.3, Nginx/1.17.3 e PHP 7.3.11
<pre>
<pre>
Line 59: Line 59:
</pre>
</pre>
<br />
<br />
Se você perceber que isto não funcionou (scripts, styles, e imagens não estão carregando) '''e''' que há linhas com <code>open() "..." failed (20: Not a directory)</code> 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.
Se você perceber que isto não funcionou (scripts, styles, e imagens não estão carregando) '''e''' que há linhas com <code>open() "..." failed (20: Not a directory)</code> 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''' do bloco.




Line 78: Line 78:
location /dataroot/ {
location /dataroot/ {
     internal;
     internal;
     alias &lt;caminho-completo-do-diretório-moodledata&gt;; # certifique-se que tenha um barra no final, exemplo: alias /var/www/moodledata/;
     alias &lt;caminho-completo-do-diretório-moodledata&gt;; # Certifique-se que o caminho termine com uma barra. Exemplo: alias /var/www/moodledata/;
}
}
</pre>
</pre>


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





Revision as of 19:55, 13 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 e 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 do 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 o caminho termine com uma barra. Exemplo: alias /var/www/moodledata/;
}

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