Implemeting Nginx como proxy reverso em uma instância do EC2, para um farm Eclipse Che

1

Procurando pelo Eclipse Che de escala (um IDE de nuvem), estou implementando um Che Farm . Em suma, um grupo de instâncias do Eclipse Che por trás de um proxy reverso.

Ok,estouimplementandooproxyreversousandoNginxemumainstânciadoEC2usandooAmazonLinuxAMI,masdescobriesteproblema:oEclipseCheprecisaabriraporta8080paraoclienteeointervalo32768-65535paraseusespaçosdetrabalho(maisinformações aqui ).

Então, eu modifiquei o arquivo nginx.conf assim:

server {
    listen 32768;
    listen 32769;
    listen 32770;
    listen 32771;
    [...]
    listen 65534;
    listen 65535;

    server_name  http://eclipse.company.cxx;

    location / {
        proxy_pass  http://eclipse.company.local:$server_port;
    }
}

Depois de reiniciar o nginx, recebi esta mensagem:

$ sudo service nginx restart
nginx: [emerg] socket() 0.0.0.0:33786 failed (24: Too many open files)
nginx: configuration file /etc/nginx/nginx.conf test failed

Duas perguntas, por favor:

  1. Esta é uma abordagem válida para implementar um proxy reverso nessa situação?
  2. Se isso for válido, como posso corrigir o erro "Muitos arquivos abertos"?
por JonDoe297 01.07.2016 / 01:19

1 resposta

1
  • Não tenho certeza sobre seu ambiente, apenas como uma dica: a máquina em questão pode ser acessada publicamente? Em caso afirmativo, implemente a autenticação / autorização ou use uma VPN.

    If this is valid, how can I fix the error "Too many open files"?

  • Provavelmente, porque está ouvindo muitas portas, seu nginx é executado contra limites, especificamente aqueles que lidam com descritor (es) de arquivo , que "[...] é um indicador abstrato (identificador) usado para acessar um arquivo ou outro recurso de entrada / saída, como um pipe ou soquete de rede".

  • Para ajustar esses limites:

    • Aproveite a diretiva nginx worker_rlimit_nofile .
    • Se isso não for suficiente:

      • Altere o limite de todo o sistema, que é armazenado em /proc/sys/file-max . Para alterá-lo, execute sysctl -w fs.file-max=${your-new-limit} . Para torná-lo persistente nas reinicializações, etc. edite /etc/sysctl.conf .
      • Altere o limite de usuários, que é armazenado em /etc/security/limits.conf : Dentro de, coloque por exemplo duas linhas de leitura:

        nginx soft nofile ${your-new-soft-limit} 
        nginx hard nofile ${your-new-hard-limit}
        
por 01.07.2016 / 01:39