web-dev-qa-db-ja.com

アップストリームからの応答ヘッダーの読み取り中に、アップストリームが途中で閉じられた接続

Jenkins CIサーバーにSSLを設定する際に問題が発生します。リバースプロキシにはnginxの背後にあるJenkinsを使用しています。 upstream prematurely closed connection while reading response header from upstreamファイルにこれらのjenkins.error.logエラーが表示されます。

2014/09/30 13:01:49 [error] 4875#0: *1 upstream prematurely closed connection while reading response header from upstream, client: <MY IP ADDR>, server: jenkins.<SERVER URL>.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8080/favicon.ico", Host: "jenkins.<SERVER URL>.com"
2014/09/30 13:01:50 [error] 4875#0: *1 upstream prematurely closed connection while reading response header from upstream, client: <MY IP ADDR>, server: jenkins.<SERVER URL>.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", Host: "jenkins.<SERVER URL>.com"

Jenkinsが稼働しています。 https://<SERVER IP ADDR>:8080経由で接続できます(ただし、Chromeは証明書について不満があります)。nginxから公式URLに対して502 Bad Gatewayメッセージが表示されます。

サイトで利用可能な構成:

upstream jenkins {
    server 127.0.0.1:8080 fail_timeout=0;
}

server {
  listen 80;
  return 301 https://$Host$request_uri;
}

server {
  listen 443;
  #listen [::]:443 default ipv6only=on;
  server_name jenkins.<SERVER URL>.com <SERVER IP ADDR>;

  ssl on;
  ssl_certificate /etc/nginx/ssl/jenkins.<SERVER URL>.com.chained.crt;
  ssl_certificate_key /etc/nginx/ssl/<SERVER URL>.com.key;

  access_log /etc/nginx/logs/jenkins.access.log;
  error_log /etc/nginx/logs/jenkins.error.log;

  location / {
    proxy_set_header        Host $Host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_redirect          http:// https://;
    proxy_pass              http://jenkins;
  }
}
6
Bryan Sills

問題はジェンキンス自体にありました。最初はJenkinsのhttpポートを無効にし、httpsのみを許可しました。再びhttpを許可すると、127.0.0.1からのリクエストのみが許可され、問題が解決しました。

tl; dr:httpポートを有効にし、127.0.0.1経由のリクエストのみを許可します

2
Bryan Sills