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