Aleluia! Tudo isso acabou sendo um problema de política do SELinux especificamente relacionado ao nginx. Depois de horas de escavação, descobri tais negações executando:
sudo grep nginx /var/log/audit/audit.log
As mensagens pareciam assim:
type=AVC msg=audit(1415283617.227:1386): avc: denied { write } for pid=1683 comm="nginx" name="my_app.sock" dev="tmpfs" ino=20657 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_run_t:s0 tclass=sock_file
Para corrigir isso, encontrei um artigo maravilhoso de Axilleas .
Para criar a política que contém as permissões necessárias, tive que instalar o audit2allow
e executar:
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
Uma vez concluído, finalizei a política com:
semodule -i nginx.pp
Infelizmente, tive que executar esse processo duas vezes antes de poder acessar meu aplicativo, pois eram necessárias políticas adicionais. No entanto, aqui estava a solução.
Além disso, há outro artigo interessante por Sergiy Krylkov .
Moral da história: aprenda o SELinux.