Прокси Nginx для страницы GitHub? - PullRequest
3 голосов
/ 29 июня 2009

У нас есть блог, который мы размещаем на github с Jekyll; это там: http://blog.superfeedr.com

В идеале, я хочу, чтобы он был на http://superfeedr.com/blog/, потому что нам нужно добавить немного AJAX, и нам нужно избежать проблем с «Same Origin Policy».

Мы используем 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: очевидно, мы могли бы разместить блог на нашем главном сервере, но цель состоит в том, чтобы разместить его на другом хосте, чтобы мы могли почти гарантировать, что он будет онлайн, если сайт не работает ...

Ответы [ 2 ]

5 голосов
/ 29 июня 2009

Во-первых, nginx не отправляет заголовок Host на 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;

Во-вторых, требуется некоторая перезапись 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;
    }

Вам также необходимо указать все пути, на которые ссылается блог (CSS, изображения и т. Д.), Например

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;
        }
0 голосов
/ 27 декабря 2014

Другим способом сделать это (но без участия nginx) может быть директива DNS. Я думаю, что большинство служб DNS предлагают услугу пересылки URL.

Например, на hover.com сначала добавьте blog с директивой A к 64.99.80.30 на вкладке DNS, а затем на вкладке Вперед добавьте blog forward к http://superfeedr.com/blog/

На dnsimple.com все проще, просто добавьте blog URL запись для пересылки на http://superfeedr.com/blog/

Я полагаю, что эти пересылки также работают для URL-адресов https://.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...