New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用 HTTPS 部署 Gogs #12

Open
Unknwon opened this Issue Nov 22, 2016 · 6 comments

Comments

4 participants
@Unknwon
Owner

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

This comment has been minimized.

Show comment
Hide comment
@oska874

oska874 Sep 20, 2017

自签名不靠谱啊

oska874 commented Sep 20, 2017

自签名不靠谱啊

@xingxing9688

This comment has been minimized.

Show comment
Hide comment
@xingxing9688

xingxing9688 Jan 15, 2018

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

xingxing9688 commented Jan 15, 2018

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

@RukawaKaede

This comment has been minimized.

Show comment
Hide comment
@RukawaKaede

RukawaKaede commented Jun 1, 2018

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

@Unknwon

This comment has been minimized.

Show comment
Hide comment
@Unknwon

Unknwon Jun 2, 2018

Owner

@RukawaKaede 这都被你发现了。。

Owner

Unknwon commented Jun 2, 2018

@RukawaKaede 这都被你发现了。。

@RukawaKaede

This comment has been minimized.

Show comment
Hide comment
@RukawaKaede

RukawaKaede Jun 2, 2018

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

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

This comment has been minimized.

Show comment
Hide comment
@RukawaKaede

RukawaKaede Jun 2, 2018

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

RukawaKaede commented Jun 2, 2018

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment