3

我们在 github 上使用 Jekyll 托管了一个博客;它在那里:http: //blog.superfeedr.com

理想情况下,我希望它位于http://superfeedr.com/blog/因为我们需要添加一些 AJAX 并且我们需要避免“同源策略”问题。

我们在“主”网络服务器上使用 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;
}

不幸的是,如果您访问http://superfeedr.com/blog/ ,您会看到这显然是行不通的。奇怪的是,我们被重定向到 Github 的主页。

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

4

2 回答 2

5

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

proxy_set_header 主机 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;

其次,需要一些 url 重写。由于某种奇怪的原因,这取决于您使用的 nginx 版本。无论如何,对于 0.6.x(对我来说是 0.6.32)这应该有效:

    位置/博客{
                最后重写 ^/blog(.*)$ /$1;
                error_page 402 = @blog;
                返回402;
    }
    位置@博客{
        proxy_pass http://blog.superfeedr.com;

        # 其余的代理参数应该在这里

         proxy_set_header 主机 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;
    }

您还需要涵盖博客引用的所有路径(css、图像等),例如

位置 /css {
    error_page 402 = @blog;
    返回402;
}

对于 0.7.59:

        位置/博客{
                设置$博客1;
                最后重写 ^/blog(.*)$ /$1;
        }
        位置 /css {
                设置$博客1;
                error_page 402 = @blog;
                返回402;
        }
        地点 / {
                如果($博客){
                        error_page 402 = @blog;
                        返回402;
                }
                # 这里是 / 的默认设置
                根 /usr/local/www/nginx/;
        }
        位置@博客{
                proxy_pass http://blog.superfeedr.com;

                # 其余的代理参数应该在这里

                proxy_set_header 主机 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;
        }
于 2009-06-29T15:49:32.673 回答
0

另一种方法(但不涉及 nginx)可以使用 DNS 指令。我认为大多数 DNS 服务都提供 URL 转发服务。

例如,在 hover.com 中,首先在 DNS 选项卡下添加blogwithA指令64.99.80.30,然后在 Forward 选项卡中,添加blogforward tohttp://superfeedr.com/blog/

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

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

于 2014-12-27T12:08:56.503 回答