0%

[Nginx] 解決 connect() failed (111: Connection refused) while connecting to upstream

在使用 Nginx 作為 Reverse proxy 時,有可能會遇到 connect() failed (111: Connection refused) while connecting to upstream 的問題,這個問題需要檢查 Nginx config 是否有正確設定 proxy_http_version

這邊我們用 Nginx 作為 Elasticsearch 的 reverse proxy 來當作範例,設定檔如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
upstream elasticsearch {
server 127.0.0.1:9200;
keepalive 64;
}

server {
listen 8080;
server_name localhost;

location / {
# Proxy
proxy_pass http://elasticsearch;
proxy_redirect off;
proxy_http_version 1.1;

proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}

最重要的是 proxy_http_version 這個設定,要讓 Nginx 作為 proxy 可以和 upstream backend service 之間也使用 keepalive,必須使用 http 1.1,但預設值是 1.0,因此必須在 config 中加上此設定,同時也記得設定 proxy_set_header Connection "";

參考資料: