2011-05-09 31 views
5

Estoy intentando configurar una aplicación Rails 3 detrás de un servidor web Apache2 que actúa como un proxy. El servidor web Apache se está ejecutando en el puerto 8080, y si realizo una llamada al http://ip:8080, veo la solicitud en la ventana de mongrel, por lo que el proxy retransmite correctamente las solicitudes entrantes a los servidores mongrel.Aplicación Rails3 detrás de un Proxy

Sin embargo, mi página de índice realiza un redireccionamiento al inicio de sesión si no existe un nombre de usuario. Así que hago la siguiente llamada: http: //: 8080/app, pero el redireccionamiento va a http: /// session/new en lugar de http: /// app/sessio/new . No estoy seguro de que el Apache está mal configurado, tengo más dudas sobre los rieles 3.

A continuación se muestra la configuración de mi apache para esta información de proxy, mi archivo routes.rb y algún código que encontré para una posible corrección de proxy inverso, pero no lo hace Parece que funciona

REVERSE_PROXY_FIX

BASE_URL = '' 
module ActionController 
    ActionController::Base.asset_host= BASE_URL 

    class UrlRewriter 
# alias old_rewrite_url rewrite_url 

    # Prepends the BASE_URL to all of the URL requests created by the 
    # URL rewriter in Rails. 
    def rewrite_url(path, options) 
     url = old_rewrite_url(path, options) 
     url = url.gsub(@request.protocol + @request.host_with_port, '') 
     url = BASE_URL + url 
     url 
    end 
    end 
end 

Apache 2 config

# This file contains the proxy settings for apache to map all the incomming requests for a specific application to the relevant mongrel 
# web server that is able to handle the incoming requests. 
LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 
ProxyRequests Off 

<Proxy *> 
    Order deny,allow 
    Allow from all 
</Proxy> 


# The section below tells Apache where to find all the static files for our applications. 
# Because these settings are application specific, we need to create entries for each application 
# that we wish to run under the Apache & Mongrel configuration 
Alias /Esco "c:/web/esco/public" 
<Directory "C:/web/esco/public"> 
    Options Indexes FollowSymLinks 
    AllowOverride none 
    Order allow,deny 
    Allow from all 
</Directory> 

ProxyPass /Esco/images ! 
ProxyPass /Esco/stylesheets ! 
ProxyPass /Esco/javascripts ! 
ProxyPass /Esco/ http://127.0.0.1:4000/ 
ProxyPass /Esco http://127.0.0.1:4000/ 
ProxyPassReverse /Esco/ http://127.0.0.1:4000/ 

routes.rb

ESCO::Application.routes.draw do 
    root :to => 'static#index' 
    resources :cvs 
    match 'cvs/match' => 'cvs#match', :as => :match_resume, :via => :post 

    # Session Routes 
    # These routes are for logging in and out from the application. 
    match 'session/new' => 'session#new', :as => :new_session, :via => :get 
    match 'session/create' => 'session#create', :as => :create_session, :via => :put 
    match 'session/destroy' => 'session#destroy', :as => :destroy_session, :via => :delete 

    # Admin panel Routers 
    # These routes are for managing all the entities currently residing in the application 
    match 'admin' => 'admin/static#index', :as => :admin_index, :via => :get 
    match 'admin/cvs/save' => 'admin/cvs#save', :as => :admin_save_cv, :via => :post 
    namespace "admin" do 
    resources :users, :cvs, :settings, :languages, :vacancies, :countries, :languages 
    end 
end 

También me gusta mnetion que el Apache se ejecuta en un sistema de Windows Server 2008R2 x64 y que las aplicaciones de rieles se ejecutan dentro de un servidor Mongrel en el mismo sistema que el puerto 400 0 -> 4010. Espero que alguien me ayude a ordenar este proxy inverso.

EDITAR: He actualizado el archivo config.ru para ejecutar la aplicación desde el mismo dominio subcarpeta como el proxy lo haría, y eso me permite ver las vistas, etc, pero todavía faltan las hojas de estilo e imágenes .

Mestizo recibe lo siguiente:

Started GET "/Esco/" for 81.82.197.2 at 2011-05-09 13:25:44 +0200 
    Processing by StaticController#index as HTML 
Rendered static/index.html.haml within layouts/application (15.6ms) 
Completed 200 OK in 31ms (Views: 31.2ms | ActiveRecord: 0.0ms) 

Y si hojeo a los stylsheets directamente, pueda verlas.

Respuesta

0

Finalmente resolví el problema cambiando a un frontend Nginx en lugar de apache. Mucho más fácil de configurar y funciona como un amuleto.

He realizado algunas investigaciones sobre el proxy Apache en Windows y encontré varias páginas con el problema similar descrito y errores mencionados sobre cierto archivo .so. Finalmente me di por vencido y usé nginx

0

Creo que su problema es que guías y la cremallera por defecto asume que la dirección URL raíz es/no/app

Puede solucionar este problema mediante la deformación de los rieles rack config.

Ver esta respuesta sobre cómo hacer esto: Changing the base URL for Rails 3 development

también añadir esto a la parte superior de su archivo environment.rb

ENV['RAILS_RELATIVE_URL_ROOT'] = "/app" 

Espero que esto ayude.

+0

He agregado en el config.ru las cosas agregadas y ahora recibo las vistas, etc., pero todavía faltan el CSS y las imágenes. Si busco los archivos directamente, puedo verlos sin embargo. –

+0

@NekoNova: he editado mi respuesta para incluir el cambio de la relative_root_url que alineará las rutas de los recursos css y js. –

+0

no hace ninguna diferencia, me temo. la aplicación funciona bien en localhost en el subdirectorio/app, pero al pasar cosas a través del proxy, css etc. no se carga –

7

Así es como configuré una aplicación RoR 3 detrás del proxy Apache 2 usando un URI sub.

Primero, configurar la aplicación para ejecutarse en un sub URI usando WEBrick resultante en la siguiente dirección URL:

http://localhost:3000/myapp 

En config/environment.rb añadí la línea siguiente:

ENV['RAILS_RELATIVE_URL_ROOT'] = "/myapp" 

siguiente en config.ru me cambió la línea siguiente:

run Myapp::Application 

a:

map '/myapp' do 
    run Myapp::Application 
end 

WEBrick Iniciado y señaló mi navegador a la siguiente dirección URL para asegurarse de que funciona:

http://localhost:3000/myapp 

configurado Apache siguiente. Habilitado los módulos proxy y proxy_http. Esto es lo que mi proxy.conf parece:

ProxyRequests On 
<Proxy *> 
    AddDefaultCharset off  Order deny,allow 
    Allow from all 
    #Allow from .example.com 
</Proxy> 

ProxyPass /myapp http://localhost:3000/myapp 
ProxyPassReverse /myapp http://localhost:3000/myapp 

reiniciado Apache y mi aplicación estaba disponible en:

http://www.example.com/myapp 

Todos los enlaces y redirige el trabajo.

+1

Obtenía 'Not found/myapp'. Al agregar 'ProxyPreserveHost On' se solucionó. – Justin

+0

Sé que esto tiene 5 años, pero tenga cuidado con 'ProxyRequests On ' mezclado con 'Permitir de todos', solo estoy aprendiendo sobre esto, pero parece que podría dar como resultado un [Open proxy] (https: // en.wikipedia.org/wiki/Open_proxy) situación! – 22degrees

Cuestiones relacionadas