问题
I own the domain penkov.id.au. I host a blog using github, with an A record for the subdomain michael.penkov.id.au
pointing to the github pages server (204.232.175.78).
bash-3.2$ dig michael.penkov.id.au +nocomments +nocmd +nostats
; <<>> DiG 9.8.3-P1 <<>> michael.penkov.id.au +nocomments +nocmd +nostats
;; global options: +cmd
;michael.penkov.id.au. IN A
michael.penkov.id.au. 86400 IN A 204.232.175.78
penkov.id.au. 14399 IN NS ns1.linode.com.
penkov.id.au. 14399 IN NS ns5.linode.com.
penkov.id.au. 14399 IN NS ns4.linode.com.
penkov.id.au. 14399 IN NS ns2.linode.com.
penkov.id.au. 14399 IN NS ns3.linode.com.
ns1.linode.com. 62648 IN A 69.93.127.10
ns1.linode.com. 136520 IN AAAA 2600:3c00::a
ns2.linode.com. 67499 IN A 65.19.178.10
ns2.linode.com. 122812 IN AAAA 2600:3c01::a
ns3.linode.com. 124971 IN A 75.127.96.10
ns3.linode.com. 133162 IN AAAA 2600:3c02::a
ns4.linode.com. 96383 IN A 207.192.70.10
ns4.linode.com. 904 IN AAAA 2600:3c03::a
ns5.linode.com. 44638 IN A 109.74.194.10
ns5.linode.com. 56329 IN AAAA 2a01:7e00::a
Recently (around a month ago, maybe more), I've found that all requests to the subdomain (e.g. http://michael.penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html) are met with a 302 response. This is a problem for sites like facebook.com, which don't bother accessing that URL to provide previews. Github notes that 302 redirects are not errors and should be followed, but Facebook apparently ignores that.
I had a look at the request & response headers using Chrome's debugging tools:
Request:
GET /blog/2014/01/02/reinventing-the-wheel.html HTTP/1.1
Host: michael.penkov.id.au
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ja;q=0.6,ru;q=0.4
Cookie: __utma=146715829.533338776.1383309288.1383487335.1383547294.7; __utmz=146715829.1383309288.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=118121621.1819750941.1383609188.1387026971.1388676605.15; __utmb=118121621.11.10.1388676605; __utmc=118121621; __utmz=118121621.1387026971.14.7.utmcsr=facebook.com|utmccn=(referral)|utmcmd=referral|utmcct=/
If-Modified-Since: Thu, 02 Jan 2014 14:38:15 GMT
Response:
HTTP/1.1 302 Found
Connection: close
Pragma: no-cache
cache-control: no-cache
Location: /blog/2014/01/02/reinventing-the-wheel.html
Finally, a sure way to reproduce this problem is to use the Facebook URL debugging tool. Point it at http://michael.penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html to see the problem.
My questions:
- What is causing the redirect? Is it the A-record?
- Where is the redirect actually to? How can I find this out? How can I fix it?
- Can I get rid of the redirect? In other words, how do I get the server to return 200 instead of 302? Other sites with an identical setup (e.g http://mdswanson.com/blog/2013/11/13/some-tools-i-like.html) respond with 200.
回答1:
Here's what I heard from github support:
The A record pointing to 204.232.175.78 is what's causing the 302 redirect.
Replacing the A record with a CNAME (pointing to mpenkov.github.com) in my DNS settings fixed the problem.
For reference, here's what my DNS record looks like now:
misha@misha-antec:~$ dig michael.penkov.id.au +nocomments +nocmd +nostats
; <<>> DiG 9.8.1-P1 <<>> michael.penkov.id.au +nocomments +nocmd +nostats
;; global options: +cmd
;michael.penkov.id.au. IN A
michael.penkov.id.au. 85536 IN CNAME mpenkov.github.com.
mpenkov.github.com. 2736 IN CNAME github.map.fastly.net.
github.map.fastly.net. 25 IN A 103.245.222.133
回答2:
Coincidentally, I ran into a similar issue because I'm using CloudFlare to manage my DNS and GitHub pages on an apex domain. I have two A records pointing to the GitHub Pages servers 192.30.252.153
192.30.252.154
and a CNAME on www subdomain pointing to the root domain.
I asked GitHub support about the random 302 redirects I've been seeing and they told me this:
Because you are using Cloudflare with A records you are running into our Denial of Service (DOS) mitigation technology.
In order to avoid this issue, you could use a sub domain, e.g. blog.example.com, instead of an apex domain, e.g. example.com, as a CNAME for your GitHub Page. This sub domain will be backed by our Content Delivery Network and won't return a 302.
If you would like to use apex domains you will need to point them directly at the GitHub Pages IPs.
Luckily (or not), CloudFlare does offer the chance of breaking the RFC compliance and allow the use of CNAME records on naked domains. Of course it could break the email service, but I'm fine with that because I'm not making use of it.
Hope this helps someone.
回答3:
I'm met with a 200
HTTP response.:
GET http://michael.penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html
HTTP/1.1 200 OK
Server: GitHub.com
Date: Thu, 02 Jan 2014 16:04:17 GMT
Content-Type: text/html
Connection: keep-alive
Content-Length: 10314
Last-Modified: Thu, 02 Jan 2014 14:38:15 GMT
Expires: Thu, 02 Jan 2014 16:14:17 GMT
Cache-Control: max-age=600
Vary: Accept-Encoding
Accept-Ranges: bytes
Vary: Accept-Encoding
You're likely waiting for Facebook (and other services') DNS cache to flush. It shouldn't take more than 48 hours. I can sometimes get the Facebook Debugger to return a 200
, but it still has errors, because of this HTML tag on the page pointing elsewhere:
<link rel="canonical" href="http://penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html" />

来源:https://stackoverflow.com/questions/20885695/why-is-my-github-hosted-site-responding-with-http-302-instead-of-200