Ocultando versões do Nginx e PHP de seu servidor web

Uma prática comum em administração de servidores é ocultar a versão dos softwares utilizados, o que dificultaria na exploração de falhas específicas de um determinado pacote. Resolvi escrever esse arquivo mostrando como é fácil ocultar tais informações no Nginx e no PHP.

Nginx

Para remover a versão do Nginx das requisições, edite o arquivo nginx.conf (geralmente em /etc/nginx) e dentro de umas seções: http, server ou location, acrescente:

server_tokens off;

O uso da variável na seção http modificará a exibição em todos os servers configurados. Por sua vez, você pode filtrar esse comportamento usando a diretiva na seção server, para remover a informação de versão em um servidor específico ou ainda na seção location, para um local específico. Realizada a alteração, reinicie o servidor web:

service nginx restart

PHP

Para ocultar a versão do PHP, abra o arquivo php.ini e procure pela configuração expose_php:

expose_php = Off

Não se esqueça de reiniciar o Apache ou o PHP5-FPM para que a alteração surja efeito.

Plugin WordPress: Fast Flickr

Apesar do Flickr não ser mais o mesmo de antes, precisei em um trabalho exibir as fotos de um set em uma janela estilo lightbox. Em 2006 tinha escrito um plugin tosco e resolvi escrever algo novo.

Demo:

Uso:

  1. Faça o download dos arquivos, copie-os para seu diretório de plugins;
  2. Ative o Fast Flickr em seu administrador;
  3. Use em seus posts ou páginas:
[ fastflickr set=ID DO SET ]

Foi algo que escrevi em poucas horas e faz apenas o básico. O código está no GitHub.

Geração de PDFs indolor no PHP

Tempos atrás escrevi um artigo sobre como gerar PDF dentro do Rails usando a gem wicked_pdf e o wkhtmltopdf. Como escrevi no post anterior, o wkhtmltopdf usa Webkit, a engine de renderização do Safari / Chrome para gerar a visualização do documento. Isso o torna superior se comparado com bibliotecas do PHP como o FPDF, pois, geralmente, essa bibliotecas possuem dificuldades para reproduzir efeitos de CSS.

Em um novo projeto, estou usando novamente o wkhtmltopdf, mas agora dentro do PHP. No post anterior, indiquei que você pode usar o binário disponível no site, entretanto no servidor atual, tive alguns problemas com isso. Então, se possível, compile o wkhtmltopdf direto da fonte.

Compilação passo-a-passo

Instale em seu servidor alguns pacotes que irá precisar:

apt-get install openssl build-essential xorg libssl-dev libxrender-dev git-core

… e obtenha o código fonte recente do wkhtmltopdf:

git clone git://github.com/antialize/wkhtmltopdf.git wkhtmltopdf
git clone git://gitorious.org/+wkhtml2pdf/qt/wkhtmltopdf-qt.git wkhtmltopdf-qt

Veja, para usar o wkhtmltopdf você precisará do QT. Nesse caso também vamos compilá-lo manualmente:

cd wkhtmltopdf-qt
git checkout staging
QTDIR=. ./bin/syncqt
./configure -nomake tools,examples,demos,docs,translations -opensource -prefix "../wkqt"
make -j3 && make install
cd .. 

Com o QT gerado, você finalmente poderá compilar o wkhtmltopdf:

cd wkhtmltopdf
../wkqt/bin/qmake
make && make install

Não inventei a receita acima, mas ela funcionou perfeitamente no Debian. Com a compilação a pasta /usr/bin ganhou 2 novos executáveis: wkhtmltopdf e wkhtmltoimage. Com isso você já pode usar o utilitário pelo shell. Se quiser testá-lo, experimente:

PHP

Dentro do próprio site do wkhtmltopdf há uma classe em PHP para utilizar o aplicativo dentro do seu site, entretanto, optei por uma classe disponível no Github. Um simples exemplo, tirado do próprio repositório:

try {
	$wkhtmltopdf = new Wkhtmltopdf(array('path' => APPLICATION_PATH . '/../public/uploads/'));
	$wkhtmltopdf->setTitle("Title");
	$wkhtmltopdf->setHtml("Content");
	$wkhtmltopdf->output(Wkhtmltopdf::MODE_DOWNLOAD, "file.pdf");
} catch (Exception $e) {
	echo $e->getMessage();
}

O que o exemplo não mostra é como definir uma mensagem de rodapé. Só depois de algum tempo, percebi que o wkhtmltopdf busca um arquivo externo. No meu aplicativo, defino o rodapé dinamicamente:

$wkhtmltopdf->setFooterHtml("footer.php?msg='Hello World!'");

Coletânea de dicas sobre WordPress

Resolvi escrever uma série de posts com diversas dicas para o WordPress.

Temas

Vai escrever um template do zero? Recomendo começar pelo HTML5 Boilerplate. Trata-se de um template com diversas otimizações e resets para garantir a compatibilidade máxima entre browsers.

Também é interessante uma leitura sobre o desenvolvimento de temas, principalmente sobre a hierarquia dos templates e a função get_template. Venho utilizando essa função para não repetir código nos arquivos archive.php, page.php, search.php e single.php.

Rascunhos de posts

O WordPress salva automaticamente seus posts, o que pode aumentar o tamanho de seu banco de dados. Para desabilitar esse recurso, você pode editar o arquivo /wp-config.php:
Continue reading