2010-12-14 59 views
2

我还没有确定这是Apache问题还是Sinatra问题,基本上,我们有一堆运行在单个服务器上的小应用程序,我们只使用内置的webrick实例部署它们,并使用apache重新部署它们,通过子域将这些请求路由到正确的端口。我正在使用gollum,它是一个带有git持久层的sinatra应用程序,但是当它重定向时(编辑操作之后),我得到了意外的应用程序路由。我不确定我是否可以通过向Sinatra传递启动选项来解决此问题,或者通过在应用程序的虚拟主机声明中配置重写规则来解决此问题。请在你的回答中包括你认为最好的选项,以及它如何实现的例子。 谢谢,这是Sinatra配置问题还是Apache配置问题?

# apache virtualhost declaration 
<VirtualHost *:80> 
    ServerName wiki.domain.com 
    DocumentRoot "/var/www/html" 

    ProxyPass/http://localhost:3006 
    ProxyPassReverse/http://localhost:3006 
</VirtualHost> 

解决了西纳特拉罚款入眼,如

wiki.domain.com/Home 

,但未能对辛纳屈重定向

# expected 
wiki.domain.com/Home 

# actual 
wiki.domain.com:3006/Home 

这里是屈的动作(来源:https://github.com/github/gollum/blob/master/lib/gollum/frontend/app.rb

post '/edit/*' do 
    name = params[:splat].first 
    wiki = Gollum::Wiki.new(settings.gollum_path) 
    page = wiki.page(name) 
    format = params[:format].intern 
    name = params[:rename] if params[:rename] 

    wiki.update_page(page, name, format, params[:content], commit_message) 

    redirect "/#{CGI.escape(Gollum::Page.cname(name))}" 
end 

回答

0

这是一个长镜头,但也许ProxyPass指令中的URL需要有尾随/?这就是它在文档中的情况,并且在没有它们的情况下我在error.log中得到了一些奇怪的条目。