题
我们有我们与哲基尔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
,然后在正向标签,添加blog
着http://superfeedr.com/blog/
在dnsimple.com,它更简单,只需添加blog
URL
记录转发给http://superfeedr.com/blog/
这些前锋,我相信,也连续工作https://
类型的URL。
不隶属于 StackOverflow