nginx: desenvolvimento de módulos

Uma referência incontornável na introdução ao desenvolvimento de módulos nginx é sem dúvida o artigo Emiller’s Guide To Nginx Module Development.
Não menos valiosa é ainda a contribuição do Antoine Bonavita: Development of modules for nginx (tradução para Inglês do artigo original em Russo).

Para um servidor http com o potencial do nginx esta é, até agora, a melhor literatura que encontrei especificamente sobre o desenvolvimento de módulos.
O projeto em si padece de falta de documentação técnica e a bibliografia em geral não cobre detalhadamente esta componente.

Como quando se começa com uma nova linguagem de programação, a tentação é procurar um exemplo “hello world” que também o há para o nginx, no entanto, dada a facilidade de borrar a pintura entre apontadores e referências, parece-me mais prudente iniciar a experiência com um módulo cuja principal funcionalidade é não fazer nada. Neste contexto, “não fazer nada” significa que vamos conseguir compilar o nosso módulo junto com o restante código fonte do nginx (ao contrário dos módulos de Apache que são dinamicamente linkados, os módulos nginx são compilados com o core) , não quebrando o seu funcionamento.

Continue reading

nginx + php-fpm: File not found.

Uma pesquisa pelos termos “nginx + php-fp File not found.” oferece um vasto leque de literatura e receitas para, expectavelmente, resolver o problema.
Se por acaso “aterrou” nesta página já em último reduto, talvez a origem do problema não esteja no ficheiro de configuração do nginx.

No error_log pode ler-se ainda: FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, reforçando a possibilidade de tratar-se dum problema de permissões.

Se já confirmou que o utilizador/grupo nginx (ou outro com o qual o nginx esteja a ser executado) tem permissões para executar os scripts, então confirme que o php-fpm está a correr com esse utilizador.

  1. Abrir o ficheiro ficheiro de configuração da pool (/etc/php-fpm.d/www.conf)
  2. Procurar por “user”
  3. Modificar, se necessário, os valores de “user” e “group”
  4. Reiniciar o php-fpm (/etc/init.d/php-fpm restart)

No meu caso a pool por omissão estava configurada para o utilizador e grupo “apache”.