将 nginx 设置为 Github 页面前端,启用 https
Setup nginx as Github Pages frontend, with https enabled
我想为 Github 页面使用自定义域,并使用我自己的证书(不是 CloudFlare 证书)启用 HTTPS。
根据 Github Pages 说明,第一部分是通过在项目根文件夹和 DNS 中设置 CNAME 来完成的,但这种方式不支持 HTTPS:https://example.github.io
自定义域 example.com
只能在 http://example.com
中访问,https://example.com
将无法使用。
于是我想到了nginx反向代理:去掉CNAME文件和DNS设置,让3个链接共存,重定向http自定义域到https一个,转发https一个请求到github.io
地址。
然而,结果并不完美:主页和css(在/css/main.css!)加载正确,所有链接显示正常,但点击它们会导致301 并重定向到 github.io.
我的nginx版本是1.9.5,80端口的配置:
server {
listen 80;
server_name myblog.com;
return 301 https://$server_name$request_uri;
}
对于 443:
server {
listen 443 ssl http2;
server_name myblog.com;
ssl_certificate /etc/nginx/ssl/orz.crt;
ssl_certificate_key /etc/nginx/ssl/orz.key;
add_header Strict-Transport-Security max-age=31536000;
location / {
proxy_pass https://example.github.io;
proxy_set_header Host example.github.io;
}
}
通过添加 2 行修复:
proxy_redirect https://example.github.io https://example.com;
proxy_redirect http://example.github.io https://example.com;
顺便说一句,如果您想在 Github 页面上托管 Jekyll/Ghost,请确保您帖子的永久链接以 /
结尾,否则将花费另外 301..
如果使用 Jekyll,在 server
块上为 css 文件添加服务器端推送:
add_header Link '</css/main.css>; rel=preload; as=stylesheet';
我想为 Github 页面使用自定义域,并使用我自己的证书(不是 CloudFlare 证书)启用 HTTPS。
根据 Github Pages 说明,第一部分是通过在项目根文件夹和 DNS 中设置 CNAME 来完成的,但这种方式不支持 HTTPS:https://example.github.io
自定义域 example.com
只能在 http://example.com
中访问,https://example.com
将无法使用。
于是我想到了nginx反向代理:去掉CNAME文件和DNS设置,让3个链接共存,重定向http自定义域到https一个,转发https一个请求到github.io
地址。
然而,结果并不完美:主页和css(在/css/main.css!)加载正确,所有链接显示正常,但点击它们会导致301 并重定向到 github.io.
我的nginx版本是1.9.5,80端口的配置:
server {
listen 80;
server_name myblog.com;
return 301 https://$server_name$request_uri;
}
对于 443:
server {
listen 443 ssl http2;
server_name myblog.com;
ssl_certificate /etc/nginx/ssl/orz.crt;
ssl_certificate_key /etc/nginx/ssl/orz.key;
add_header Strict-Transport-Security max-age=31536000;
location / {
proxy_pass https://example.github.io;
proxy_set_header Host example.github.io;
}
}
通过添加 2 行修复:
proxy_redirect https://example.github.io https://example.com;
proxy_redirect http://example.github.io https://example.com;
顺便说一句,如果您想在 Github 页面上托管 Jekyll/Ghost,请确保您帖子的永久链接以 /
结尾,否则将花费另外 301..
如果使用 Jekyll,在 server
块上为 css 文件添加服务器端推送:
add_header Link '</css/main.css>; rel=preload; as=stylesheet';