我有GitLab的nginx设置,可以在127.0.0.1:8088收听.然后我有一个系统nginx(通过Ubuntu上的apt-get安装)设置为HTTPS的反向代理:
upstream gitlab {
server localhost:8088 fail_timeout=0;
}
server {
listen 80;
server_name gitlab.myhost.com;
return 301 https://$server_name$request_uri;
}
# let gitlab deal with the redirection
server {
listen 443 ssl;
server_name gitlab.myhost.com;
ssl_certificate /srv/www/gitlab.myhost.com.unified.crt;
ssl_certificate_key /srv/www/gitlab.myhost.com.key;
location / {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://gitlab;
}
}
这工作正常,基本上所有请求都转发到HTTPS.但是,因为GitLab仍然认为它在HTTP中运行,页面上有一些图形资源,而Gravatar正在使用HTTP方案.我该如何解决这个问题?
当然我知道我可以配置gitlab.rb来使用HTTPS URL.但是,当这样做时,GitLab将开始要求证书来设置自己的nginx.我真的只需要自己的nginx在本地环回的HTTP中运行.
最佳答案
我知道这是一个老问题,但是,
nano /etc/gitlab/gitlab.rb
set external_url="https://whatever"
然后在nginx区域找到正确的方向.
inside the nginx['proxy_set_headers'] = { directive add
"X-Forwarded-Ssl" => "on",
这将假设您的SSL是在代理上进一步构建的.并且url将所有http重写为https