我使用certbot
来获取SSL证书。当时 ubuntu 的默认 apache 服务器正在侦听端口 80。假设我的服务器可以通过example.com
访问。
现在,我正在使用之前通过letsencrypt获得的SSL证书运行GitLab CE 9.4.4服务器。在/etc/gitlab/gitlab.rb
我和这样的东西一样
nginx['ssl_certificate'] = "/etc/letsencrypt/live/example.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/example.com/privkey.pem"
(以及与 docker 注册表的registry_nginx
类似的行。
但是,当它尝试续订我的证书时,certbot renew
失败,因为/var/www/.well-known
无法通过http://example.com/.well-known
访问。
当人们尝试使用Google网站管理员工具时,会出现类似的问题。默认验证过程要求您将名为googleXXXXXXX.html
的文件上载到服务器的根目录中。
如何将 GitLab 配置为服务器.well-known
中的静态文件和以google
开头的文件?
(不幸的是,包含gitlab和静态文件的Google 搜索会产生有关 GitLab 页面的结果。
Via GitLab Webroot
默认情况下,Ubuntu 上的 GitLab CE 的 webroot 是/opt/gitlab/embedded/service/gitlab-rails/public
的。您可以将googleXXXX.html
复制到此目录中,并将LetsEncrypt的webroot指向此目录:
...
[renewalparams]
authenticator = webroot
installer = None
account = SOMEHASH
[[webroot_map]]
example.com = /opt/gitlab/embedded/service/gitlab-rails/public
通过 GitLab Config
配置让我们加密
打开续订配置,例如/etc/letsencrypt/renewal/example.com.conf
,然后调整选项,使 Web 根目录指向/var/www/letsencrypt
:
...
[renewalparams]
authenticator = webroot
installer = None
account = SOMEHASH
[[webroot_map]]
example.com = /var/www/letsencrypt
创建目录/var/www/letsencrypt
和/var/www/letsencrypt/.well-known
。后一个目录将托管验证质询文件。
配置网站站长工具
创建目录/var/www/google
并将其googleXXXX.html
下载到新创建的目录中。
配置 GitLab(用于 LetsEncrypt 和 Webmaster 工具(
打开/etc/gitlab/gitlab.rb
并添加以下两行。
nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }n"
nginx['custom_gitlab_server_config'] << "location ^~ /google { root /var/www/google; }n"
通过运行以下命令重新配置您的 gitlab 服务器
gitlab-ctl reconfigure
所有以/.will-known
开头的请求现在都将转发到/var/www/letsencrypt
目录。同样,所有以/google
开头的请求都将转发到目录/var/www/google
。(请注意,这种方法会使以谷歌开头的用户或组无法访问。在这种情况下,您可以更改 gitlab 配置以包含googleXXXX.html
的全名(