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...")
 
mNo edit summary
 
(3 intermediate revisions by the same user not shown)
Line 16: Line 16:
=== Nginx ===
=== 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).  
Você deve adicionar 'argumentos com barra' (saiba mais em '[[Usando argumentos com barra]]') compatíveis no 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:'''
'''nginx.conf location:'''
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: /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'.





Latest revision as of 00:39, 15 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 'argumentos com barra' (saiba mais em 'Usando argumentos com barra') compatíveis no 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'.