亲爱的 serverfault 社区,
我最近在运行 Ubuntu14.04 的 VPS 上安装了捆绑的 GitLab。为了运行它,我使用了 nginx,它通过 http 将一个特定的子域路由到 GitLab。到目前为止一切顺利,它运行良好,不会与安装的其他服务(即 Taiga.io)发生冲突。
由于不使用 https 是个非常糟糕的主意,我决定改变它 - 我使用 Let's Encrypt 获取我的域和子域的证书,然后进行相应的设置。Taiga.io 运行顺利,没有任何问题,然后我继续使用 GitLab。
不幸的是,当我尝试在 GitLab 上设置 https 时出现502 Bad Gateway nginx/1.4.6 (Ubuntu)
错误。
这是我的设置:
/etc/gitlab/gitlab.rb:
external_url 'https://gitlab.example.com:8090'
nginx['enable'] = false
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml:
host: gitlab.example.com
port: 8090
https: true
/etc/ngingx/sites-enabled/gitlab:
server {
listen 80;
server_name gitlab.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name gitlab.example.com;
large_client_header_buffers 4 32k;
client_max_body_size 50M;
charset utf-8;
access_log /opt/gitlab/logs/nginx.access.log;
error_log /opt/gitlab/logs/nginx.error.log;
location / {
proxy_pass http://127.0.0.1:8090;
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;
}
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
# This line was taken from another config file, not sure if those pins shouldn't be changed or something?
add_header Public-Key-Pins 'pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q="; max-age=2592000; includeSubDomains';
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
ssl_session_cache shared:SSL:10m;
ssl_dhparam /etc/ssl/dhparam.pem;
ssl_stapling on;
ssl_stapling_verify on;
}
我在想,关于这个的每个教程都建议将端口设置为 443(显然),但我认为这里不应该这样,因为我无论如何都会在 nginx 中从 443 重定向到 :8090。我遗漏了什么吗?
此致!
菲利普
=================
编辑:
我看到sudo netstat -plutn
没有显示任何有关 8090 的监听信息。我猜可能是我弄乱了配置文件吧?我会期待着的。
答案1
gitlab 配置认为它将接收 https 流量,但 nginx 配置正在与其进行 http 通信。将 gitlab 配置文件中的 https 引用更改为 http,一切应该都很好。这不会影响 nginx 与客户端的通信(https)。
答案2
gitlabs 网站上有一个关于如何使用非捆绑的网络服务器进行设置的指南。
http://docs.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server
向您展示了 gitlab 配置所需的更改。您已将其设置'web-server['external_users']
为 nginx 用户吗?他们还有一个现成的 nginx.conf,您可以将其添加为虚拟主机。https://gitlab.com/gitlab-org/gitlab-recipes/blob/master/web-server/nginx/gitlab-omnibus-ssl-nginx.conf,它通过 proxy_passes 到 unix 套接字而不是通过 tcp。