Today we’re going to share with you the way to use multiple github custom domains as we did with our
teracy-official
organization account.
As we know, there are two types of github pages: user/ organization pages and project pages 1. Our organization account is located at: https://github.com/teracy-official
By default, http://teracy-official.github.io
will point to teracy-official.github.io
’s master
branch. And teracy-official.github.io/<project_name>
will point to the project’s gh-pages
branch
if it’s available.
With our requirements, we don’t want to use http://teracy-official.github.io
but
http://teracy.com
and http://teracy.org
only. That’s why we have to setup multiple github custom
domains 2.
1. Problems
From the very first days, we setup blog.teracy.com
to map to the organization page at
teracy-official.github.io
repository. We could get what we want by:
- adding CNAME
blog.teracy.com
with aliasteracy-official.github.io
via DNS manager - adding CNAME file with ‘blog.teracy.com’ content to
teracy-official.github.io/tree/master/CNAME
However, by default, this domain will be used for all other project pages if you don’t specify th project custom domains.
For example, by setting up like above and we have teracy-dev
project with gh-pages
branch.
When we access teracy-official.github.io/teracy-dev
, it will be redirected to
blog.teracy.com/teracy-dev
project page by github custom domain mechanism, and this was not what
we expected.
We also want teracy-dev
project page should be served by http://teracy-dev.teracy.org
, it’s also
every easy just configure CNAME and add CNAME file to gh-pages
branch like we did with the blog
configuration above:
- add CNAME
teracy-dev.teracy.org
with aliasteracy-official.github.io
- add CNAME file with ‘teracy-dev.teracy.org’ content to
teracy-dev/tree/gh-pages/CNAME
Wait for DNS change to be updated and access teracy-dev.teracy.org
, it should point to
teracy-dev/tree/gh-pages
site.
There is a minor problem though:
teracy-official.github.io/teracy-dev
will not be automatically redirected to
http://teracy-dev.teracy.org
If we configure the root domain http://teracy.org to map to teracy-official.github.io
page,
the link teracy-official.github.io/teracy-dev
will be redirected to teracy.org/teracy-dev
by
github custom domain mechanism. With this approach, an issue is raised: it will also introduce more
duplicated links between teracy-dev.teracy.org
and teracy.org/teracy-dev
. This duplicated issue
should be avoided.
There is a workaround that you could use JavaScript location checking. However, well, it’s not flexible enough and does not work well with search engines.
So we decided to have a router on teracy.org
by using nginx
.
2. Solution with nginx
server
2.1. Requirements
Actually, before setting up our custom domains, existing links exists and we have to maintain these by redirecting. We have these requirement rules:
- By adding ‘teracy.org’ to teracy-official.github.io/tree/master/CNAME => by github mechanism:
1
|
|
- Our nginx rules:
1 2 3 |
|
- Fix existing links by redirecting as these links are already indexed by search engines:
1 2 |
|
The detailed requirements are at: https://github.com/teracy-official/teracy-official-blog/issues/20
2.2. How to setup and configure nginx
server
With the above requirement rules, this is how to configure our nginx
server.
Create a new nginx host file at /etc/nginx/sites-available/teracy.org
and symlink it to
/etc/nginx/sites-enable/teracy.org
with the content as below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Just by applying rules from HttpRewriteModule
3, we could solve the problems easily.
That’s it. Have a nice day and happy hacking!
P/S: Sure that you can have many other solutions like Apache + Modrewrite, etc., but to us, nginx
is more lightweight, simpler and flexible enough. We also use nginx
to proxy and protect many
other HTTP(S) resources for our projects.