Nginx: Difference between revisions
No edit summary |
mNo edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 16: | Line 16: | ||
=== Nginx === | === Nginx === | ||
Você deve adicionar ' | 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 | 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''' | 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 <caminho-completo-do-diretório-moodledata>; # | alias <caminho-completo-do-diretório-moodledata>; # Certifique-se que o caminho termine com uma barra. Exemplo: alias /var/www/moodledata/; | ||
} | } | ||
</pre> | </pre> | ||
A definição 'internal' é '''crítica''', | 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'.