Skip to content
This repository has been archived by the owner. It is now read-only.

使用 HTTPS 部署 Gogs #12

Open
unknwon opened this issue Nov 22, 2016 · 8 comments
Open

使用 HTTPS 部署 Gogs #12

unknwon opened this issue Nov 22, 2016 · 8 comments
Labels

Comments

@unknwon
Copy link
Owner

@unknwon unknwon commented Nov 22, 2016

日期:2015-11-14
更新:2015-11-14

根据部署 Gogs 的方式,目前配上 HTTPS 的方法有两种:

  1. 由反向代理服务器统一处理,例如:NGINX、Caddy
  2. 裸奔 Gogs

HTTPS 的证书也有两种:真的和假装是真的。

那么,我们先来说下如何得到 HTTPS 证书。

获得 HTTPS 证书

  1. 付费购买商业证书(土豪,请给 Gogs 项目捐助个千八百万吧 😊
  2. Let's EncryptStartSSL 申请免费证书
  3. 自签发证书

前两种证书的获得方式基本可以谷歌到(其实我是真的懒),目前有其它工具可以生成自签发证书,这里主要说下如何用 Gogs 直接生成,改善生活。

想要 Gogs 支持生成自签发证书,必须使用 cert 构建标签构建(从官方下载的二进制都已经支持)。

好的,那么下面就是你需要执行的命令:

$ ./gogs cert -ca=true -duration=8760h0m0s -host=myhost.example.com

别忘了把域名换成你自己的(什么,你没域名?没域名你要个毛 HTTPS 啊!😵

执行成功之后,就会在当前目录下得到两个文件:cert.pemkey.pem

使用 HTTPS 证书

刚才已经提到根据部署方式的不同,有两种不同的配置方法。

如果你使用反向代理来部署 Gogs,那么 Gogs 这边除了说明你的 ROOT_URL 是带上 HTTPS,例如 https://try.gogs.io,其它

啥都别改!

啥都别改!

啥都别改!

先说 NGINX,示例配置如下:

server {
    listen 443 ssl;
    server_name try.gogs.io;
    ssl_certificate path/to/cert.pem;
    ssl_certificate_key path/to/key.pem;

    location / {
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_pass http://localhost:3000$request_uri;
    }
}

# 以下部分表示重定向 HTTP 请求到 HTTPS
server {
    listen 80;
    server_name try.gogs.io;
    return 301 https://$host$request_uri;
}

看见没有!Gogs 还是使用 HTTP 正常启动!HTTPS 的处理全部交给 NGINX 就尼玛对了!!!!

虽然我说的比较简陋,但我想意思应该到位了。。。

好了,再来看看 Caddy 的话要怎么配置达到相同效果:

https://try.gogs.io {
    proxy / localhost:3001
    tls path/to/cert.pem path/to/key.pem
}

# 以下部分表示重定向 HTTP 请求到 HTTPS
http://try.gogs.io {
    redir https://try.gogs.io{uri} 301
}

从简便程度来说,Caddy 真是甩 NGINX 一条天目山路!

当然,裸奔 Gogs 也是一种态度。在自定义配置中修改以下项:

[server]
PROTOCOL = https
ROOT_URL = https://try.gogs.io/
CERT_FILE = path/to/cert.pem
KEY_FILE = path/to/key.pem

(哈哈,要说行数,还是 Gogs 自带的配置最少呢 😂 连高亮都有!)

好了,如果你用的是真的证书,一个绿色的小锁会显示在 Chrome 的 URL 栏旁边;自签发的就会有个警告页面,然后是红色的坑爹状。

@unknwon unknwon added the Gogs label Nov 22, 2016
@oska874
Copy link

@oska874 oska874 commented Sep 20, 2017

自签名不靠谱啊

@xingxing122
Copy link

@xingxing122 xingxing122 commented Jan 15, 2018

这里的配置是没有问题的,但是nginx 配置为https 的话,gogs 是怎么配置的

@RukawaKaede
Copy link

@RukawaKaede RukawaKaede commented Jun 1, 2018

https://unknwon.io/setup-gogs-with-https/ 目测时一楼的原始网站

@unknwon
Copy link
Owner Author

@unknwon unknwon commented Jun 2, 2018

@RukawaKaede 这都被你发现了。。

@RukawaKaede
Copy link

@RukawaKaede RukawaKaede commented Jun 2, 2018

你好 , 我通过配置app.ini,实现了https访问,但是前端显示的git路径还是http,具体来说就是:前端的git路径显示的形式是:"http:example.com/xxxxx.git", 但是在命令行git clone时使用http是不行的,使用https倒是可以clone,我想问前端能够让git路径直接显示成https路径吗(免去每次需要手动加个s),谢谢!

@RukawaKaede
Copy link

@RukawaKaede RukawaKaede commented Jun 2, 2018

啊不好意思,再检查了一遍app.ini发现ROOT_URL忘记改成https了,打扰了~~

@aoeng
Copy link

@aoeng aoeng commented Jan 14, 2019

我用acme生成的ssl,结果https根本无法访问, ERR_CONNECTION_TIMED_OUT,ssl配置用的上面这个,你们有什么解决办法吗? @unknwon @RukawaKaede

@RukawaKaede
Copy link

@RukawaKaede RukawaKaede commented Jan 14, 2019

@aoeng 我是用的阿里云免费的SSL + Nginx配置的,流程大致如下:https://segmentfault.com/a/1190000009220479

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
5 participants
You can’t perform that action at this time.