Nginx

在 EC2 實例上實現 Nginx 作為反向代理,用於 Eclipse Che 場

  • June 30, 2016

尋找擴展Eclipse Che(一個雲 IDE),我正在實現一個Che Farm。簡而言之,一組 Eclipse Che 實例位於反向代理後面。

在此處輸入圖像描述

好的,我正在使用 Amazon Linux AMI 的 EC2 實例上使用 Nginx 實現反向代理,但我發現了這個問題:Eclipse Che 需要為客戶端打開埠 8080,並為其工作區打開範圍 32768-65535(更多資訊在這裡) .

所以,我修改了nginx.conf這樣的文件:

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;
   }
}

重新啟動 nginx 後,我收到以下消息:

$ 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

請教兩個問題:

  1. 這是在這種情況下實現反向代理的有效方法嗎?
  2. 如果這是有效的,我該如何解決錯誤“打開的文件太多”?
  • 不確定您的環境,只是作為一個提示:有問題的機器是否可以公開訪問?如果是這樣,請實施身份驗證/授權,或使用 VPN。

如果這是有效的,我該如何解決錯誤“打開的文件太多”?

  • 可能是因為它正在偵聽那麼多埠,所以您的nginx, 違反了限制,特別是那些處理文件描述符的埠, “

$$ … $$是用於訪問文件或其他輸入/輸出資源的抽象指示符(句柄),例如管道或網路套接字$$ … $$”。

  • 要調整這些限制:

    • 利用nginx指令worker_rlimit_nofile

    • 如果這還不夠:

      • 更改系統範圍的限制,該限制儲存在/proc/sys/file-max. 改變它執行sysctl -w fs.file-max=${your-new-limit}。為了使其在重新啟動等後持續存在,請編輯/etc/sysctl.conf.
      • 更改儲存在/etc/security/limits.conf: 裡面的使用者限制,例如兩行讀取:
      nginx soft nofile ${your-new-soft-limit} 
      nginx hard nofile ${your-new-hard-limit}
      

引用自:https://serverfault.com/questions/787278