2013-06-12 25 views
1

这个问题的主题是我最好的猜测罪魁祸首,但我不知道我相信它。总之,我的问题是:我的Sinatra应用程序出了什么问题?在Apache后面反向代理时缺少路由吗?

这里的设置:

  1. 我在路线之一有post '/attachments/go' do …
  2. 我有自己的看法下列操作之一:

    <form action="/attachments/go" enctype="multipart/form-data" method="post"> 
        <input name="attachments[]" type="file" multiple="multiple"> 
        <button type="submit">upload</button> 
    </form> 
    
  3. 我有不同的端口上运行我的应用程序的两种情况。

  4. 我的Apache设置为反向代理:

    … 
    <Proxy balancer://myapp/> 
        BalancerMember http://127.0.0.1:3006 
        BalancerMember http://127.0.0.1:3007 
        ProxySet lbmethod=bybusyness 
    </Proxy> 
    … 
    <VirtualHost *:80> 
        ServerName myapp.mycompany.com 
        ServerAlias myapp 
        DocumentRoot "C:/www/myapp/public" 
    
        ProxyPass /css ! 
        ProxyPass /js ! 
        ProxyPass /images ! 
        ProxyPass /attachments ! 
    
        ProxyPass  /balancer://myapp/ 
        ProxyPassReverse/balancer://myapp/ 
    </VirtualHost> 
    

下面是症状:

  1. 当我打开我的应用程序直接(thin start -e production -p 5142)一切正常。我可以发布表单并接收文件。这也适用于开发模式。

  2. 当我通过反向代理负载我的应用程序和发布形式,我得到一个404响应:

    The requested URL /attachments/go was not found on this server. 
    

我知道这是没有太多去,但:任何猜测到为什么会发生这种情况,以及如何解决它?

回答

1

像往常一样,张贴问题的行为揭示了答案。我有一个由Apache服务的字面文件/attachments,跳过了Sinatra代理。然后我命名了一个同名的路线。

此应用程序和代码一直工作几年,因此升级Sinatra或Rack引入的一些更改一定会导致此错误。 (如果不是这样,或者其他人修改了Apache的conf我不知情的情况)。无论罪魁祸首

的修复很简单:重命名为路线:

post '/attachlings/attach' do 
    … 
end 

和重写的观点来搭配,和一切安好。

课程:不要命名具有被反向代理跳过的前缀的路由。