Nginx: Difference between revisions
(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'.