我们有我们与哲基尔github上举办一个博客;它是存在的: 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:很明显,我们可以承载我们的主服务器上的博客,但我们的目标是举办一个不同的主机上,让我们几乎可以保证它是在线,如果该网站已关闭...

有帮助吗?

解决方案

首先,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;

其次,重写需要一些网址。通过一些奇怪的原因,这取决于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;
    }

您还需要覆盖所有的路径的博客是指(CSS,图像等),e.g。

location /css {
    error_page 402 = @blog;
    return 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;
        }

其他提示

另一种方式来做到这一点(但不涉及nginx的)可以是具有DNS指令。我想大多数DNS服务提供的URL转发服务。

例如,在hover.com,先用blog指令添加A DNS选项卡下64.99.80.30,然后在正向标签,添加bloghttp://superfeedr.com/blog/

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

这些前锋,我相信,也连续工作https://类型的URL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top