Nginx
在 EC2 實例上實現 Nginx 作為反向代理,用於 Eclipse Che 場
尋找擴展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
請教兩個問題:
- 這是在這種情況下實現反向代理的有效方法嗎?
- 如果這是有效的,我該如何解決錯誤“打開的文件太多”?
- 不確定您的環境,只是作為一個提示:有問題的機器是否可以公開訪問?如果是這樣,請實施身份驗證/授權,或使用 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}