Прокси Nginx для страницы GitHub?
Вопрос
У нас есть блог, который мы размещаем на GitHub вместе с Джекиллом;это там : http://blog.superfeedr.com
В идеале я хочу, чтобы это было на http://superfeedr.com/блог/ потому что нам нужно добавить немного 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/блог/ это явно не работает.Как ни странно, нас перенаправляют на домашнюю страницу Github.
ПС:очевидно, мы могли бы разместить блог на нашем главном сервере, но цель состоит в том, чтобы разместить его на другом хосте, чтобы мы могли почти гарантировать, что он будет онлайн, если сайт не работает...
Решение
Во-первых, 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; }
Другие советы
Другой способ сделать это (но без использования nginx) — использовать директиву DNS.Я думаю, что большинство служб DNS предлагают услугу пересылки URL-адресов.
Например, на hover.com сначала добавьте blog
с A
директива 64.99.80.30
на вкладке DNS, а затем на вкладке Пересылка добавьте blog
вперед к http://superfeedr.com/blog/
В dnsimple.com все проще, достаточно добавить blog
URL
запись для пересылки http://superfeedr.com/blog/
Эти нападающие, я считаю, тоже работают на https://
введите URL-адреса.