在 nginx 后面设置 GitLab,使用 https 并在不同的端口上响应

在 nginx 后面设置 GitLab,使用 https 并在不同的端口上响应

亲爱的 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。

相关内容