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;
}
}
問題はジェンキンス自体にありました。最初はJenkinsのhttpポートを無効にし、httpsのみを許可しました。再びhttpを許可すると、127.0.0.1からのリクエストのみが許可され、問題が解決しました。
tl; dr:httpポートを有効にし、127.0.0.1経由のリクエストのみを許可します