Proxy GitHub页面的Nginx代理?

Proxy GitHub页面的Nginx代理?,proxy,nginx,github,Proxy,Nginx,Github,我们有一个博客,我们在github上与Jekyll一起主持;它在那里: 理想情况下,我希望它处于最佳状态,因为我们需要添加一些AJAX,并且需要避免“同源策略”问题 我们在“主”Web服务器上使用Nginx,我有以下设置: location /blog/ { proxy_pass http://blog.superfeedr.com/; proxy_redirect off; proxy_max_temp_file_size 0; client_max_bod

我们有一个博客,我们在github上与Jekyll一起主持;它在那里:

理想情况下,我希望它处于最佳状态,因为我们需要添加一些AJAX,并且需要避免“同源策略”问题

我们在“主”Web服务器上使用Nginx,我有以下设置:

location /blog/ {

proxy_pass http://blog.superfeedr.com/;
    proxy_redirect     off;
    proxy_max_temp_file_size 0;

    client_max_body_size       10m;
    client_body_buffer_size    128k;

    proxy_connect_timeout      90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;

    proxy_buffer_size          4k;
    proxy_buffers              4 32k;
    proxy_busy_buffers_size    64k;
    proxy_temp_file_write_size 64k;
}
不幸的是,正如你所看到的,如果你这样做显然是行不通的。奇怪的是,我们被重定向到Github的主页


PS:显然,我们可以在主服务器上托管博客,但目标是在不同的主机上托管,这样我们几乎可以保证在网站关闭时它可以在线…

首先,nginx不会将主机头发送到blog.superfeedr.com。这将使其发送所有必需的标题:

proxy_set_header Host blog.superfeedr.com; proxy_set_header X-Host blog.superfeedr.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 代理设置标题主机blog.superfeedr.com; 代理设置标题X-Host blog.superfeedr.com; 代理集头X-Real-IP$remote\u addr; proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For; 其次,需要一些url重写。出于某种奇怪的原因,这取决于您使用的nginx版本。无论如何 对于0.6.x(我是0.6.32),这应该可以:

location /blog { rewrite ^/blog(.*)$ /$1 last; error_page 402 = @blog; return 402; } location @blog { proxy_pass http://blog.superfeedr.com; # the rest of proxying parameters should be here proxy_set_header Host blog.superfeedr.com; proxy_set_header X-Host blog.superfeedr.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 地点/博客{ 最后重写^/blog(.*)$/$1; 错误_第402页=@blog; 返回402; } 地点@blog{ 代理通行证http://blog.superfeedr.com; #其余代理参数应在此处 代理设置标题主机blog.superfeedr.com; 代理设置标题X-Host blog.superfeedr.com; 代理集头X-Real-IP$remote\u addr; proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For; } 你还需要涵盖博客提到的所有路径(css、图像等),例如

位置/css{ 错误_第402页=@blog; 返回402; } 对于0.7.59:

location /blog { set $blog 1; rewrite ^/blog(.*)$ /$1 last; } location /css { set $blog 1; error_page 402 = @blog; return 402; } location / { if ($blog) { error_page 402 = @blog; return 402; } # here is where default settings for / should be root /usr/local/www/nginx/; } location @blog { proxy_pass http://blog.superfeedr.com; # the rest of proxying parameters should be here proxy_set_header Host blog.superfeedr.com; proxy_set_header X-Host blog.superfeedr.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 地点/博客{ 设置$blog 1; 最后重写^/blog(.*)$/$1; } 位置/css{ 设置$blog 1; 错误_第402页=@blog; 返回402; } 地点/{ 如果($blog){ 错误_第402页=@blog; 返回402; } #此处是/的默认设置 root/usr/local/www/nginx/; } 地点@blog{ 代理通行证http://blog.superfeedr.com; #其余代理参数应在此处 代理设置标题主机blog.superfeedr.com; 代理设置标题X-Host blog.superfeedr.com; 代理集头X-Real-IP$remote\u addr; proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For; } 另一种方法(但不涉及nginx)是使用DNS指令。我认为大多数DNS服务都提供URL转发服务

例如,在hover.com中,首先使用
A
指令将
blog
添加到DNS选项卡下的
64.99.80.30
,然后在转发选项卡中,添加
blog
转发到
http://superfeedr.com/blog/

在dnsimple.com中更简单,只需添加
blog
URL
记录转发到
http://superfeedr.com/blog/


我相信,这些转发也适用于https://类型的URL。

关于PS。不同的主机将单独在线,这意味着只能作为blog.superfeedr.com使用。当主服务器关闭时,superfeedr.com/blog/将无法工作。希望你能理解。好吧,只有当Nginx关闭时,而不是当appli关闭时,这就是我们想要的。我对我的答案做了一些更正。第一个版本只增加了4行,这显然是错误的。很抱歉,它仍然不起作用。可能是我做错了什么。以下是我们的nginx配置的全部内容:现在,如果你去拿一个404…配置似乎很好,除了我不认为你真的想离开/blog/而不是if/blog(没有尾随斜杠)。你使用的是什么版本的nginx?nginx版本:nginx/0.7.59哼,你说:(我已经试过了)并且(据我所知)可以使用0.6.32。它真的对你有用吗?你能代理那个页面吗?如果是的话,你能给出一个url吗?PS/带或不带追踪/没有改变任何事情。好的。我已经清理了答案并删除了带有链接的最后一条评论(不希望被爬网) location /blog { set $blog 1; rewrite ^/blog(.*)$ /$1 last; } location /css { set $blog 1; error_page 402 = @blog; return 402; } location / { if ($blog) { error_page 402 = @blog; return 402; } # here is where default settings for / should be root /usr/local/www/nginx/; } location @blog { proxy_pass http://blog.superfeedr.com; # the rest of proxying parameters should be here proxy_set_header Host blog.superfeedr.com; proxy_set_header X-Host blog.superfeedr.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }