2011-09-13 2 views
1

누구나 jRuby Rails 3.0 앱이 AJP 마운트를 통해 Apache 2 프록시에서 작동하는지 궁금합니다. 마지막 문장의 주석 처리를 제거하지 않고도 다음 구성을 사용하고 싶습니다. 먼저mod_ajp 뒤에있는 jRuby에서 Rails 3.0을 실행하는 방법 Apache 2 프록시

<VirtualHost *:80> 

    ServerName app.example.com 

    ProxyRequests Off 
    ProxyPass  / ajp://127.0.0.1:8009/app/ 
    ProxyPassReverse/ ajp://127.0.0.1:8009/app/ 

# ProxyPassReverse/ http://app.example.com/app/ 

</VirtualHost> 

는 이름 레일 응용 프로그램의 루트 (restful_authentication에 대한 즉, 로그인과 로그 아웃 경로)에 대한 상대 리디렉션을 얻을 수있는 방법은없는 것 같다. Rails 앱은 AJP 마운트에 역방향 프록시 문을 연결하지 않지만 전체 URI (주석에 표시)에 대해 정적 HTTP 역방향 프록시 규칙에 걸려 있어야합니다. 둘째, 리버스 프록시 규칙에 따라 HTML 헬퍼의 자산 산출을 제안하는 적절한 방법이없는 것 같습니다.

나는이 작업을 수행 할 수 있지만 많은 정적 역방향 프록시 규칙처럼, 오히려 악용 같은 느낌 :

config.asset_path = proc { |path| path.gsub(/\/app\//, '/') } 

Apparantly 히 만이 배포 된 진동음 WAR의 이미 구성 범위에 추가하는 RAILS_RELATIVE_URL_ROOT을 추가하고, 경로를 줄이는 데 도움이되지 않습니다.

프록시를 실행하려면 mod_proxy_ajp 솔루션이 있어야하고, 일치하지 않는 일치 경로가있는 reverseproxy가 있어야합니다.

문제를 해결하는 방법에 대한 아이디어 나 문제를 다루는 리소스의 방향을 알려주십시오.

+0

스트레이트 좋은 구식 http 프록시 대신 ajp를 사용하면 무엇을 얻게됩니까? 안녕하세요 btw martin :) – sunkencity

+0

많은 도움이 될 것이라고 생각하지만 HTML 도우미와 관련하여 여전히 문제가 있습니다. ... 솔직히 말해서 호스트 부분이없는 로컬 리디렉션을보고 싶습니다만 호스트를 추가하는 역방향 프록시 일 수 있습니까? (안녕하세요 joel :) – Martin

+0

http://serverfault.com/questions/106254/how-can-i-set-use-mod-proxy-ajp-with-apache-and-tomcat – sunkencity

답변

1

해결 방법 1

난 당신이 AJP를 사용하여 전환하고 다른 경로 사이에 프록시에 코너 케이스의 몇 가지를 해결 프록시는 HTTP를 사용하는 데 필요한 HTTP 다시 쓰기 마법을 필요로하는 경우, 그것은 HTTP 헤더를 다시 쓰는 생각 프록시 ajp가 그 일을 잘 모르겠다. 난 그냥 ROOT.war 레일 가상 애플 리케이션 또는 Tomcat 서버에 무언가를 뿌리로 폴더를 프록시 오류의 소스를 최소화하기 위해 레일 애플 리케이션을 제공하려고합니다. 항상 작동하지 않거나 조정이 필요한 무언가가 있습니다. 포트와 로컬 도메인 이름은 저렴합니다.

생산 환경 설정 파일이 추가 :

config.action_controller.relative_url_root = '/app' 

보고 더 @What is the replacement for ActionController::Base.relative_url_root?


해결 방법 2 :

당신은에 들어오는 경로를 재설정 할 수 있습니다 당신이 원하는 경우 쉬운 랙 미들웨어와 레일 애플 리케이션. 레일 앱은 루트 경로에서 서비스하지 않는 것에 대해 아무 것도 모릅니다. 프로덕션 모드에서 정적 애셋을 레일에 제공하려면 config.serve_static_assets = true를 추가 할 수도 있습니다.

# application.rb 
require "proxy_path_reset_filter" 
config.middleware.use "ProxyPathResetFilter" 
config.action_controller.relative_url_root = '/' 

이 자유형을 입력하는 것에 사과하겠습니다 만 작동해야합니다.

# proxy_path_reset_filter.rb 
class ProxyPathResetFilter 

    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    # some servers use REQUEST_URI and some use PATH_INFO for routing use both 
    if (env['REQUEST_URI'] || env['PATH_INFO']) =~ /^\/app\// 
     env.update({ 
      'REQUEST_URI' => env['REQUEST_URI'].gsub(/^\/app\//, '/')), 
      'PATH_INFO' => env['PATH_INFO'].gsub(/^\/app\//, '/')) }) 
    end 
    @app.call(env) 
    end 

end 
+0

config.action_controller.relative_url_root가 apache 가상 호스트 명령 인 RAILS_RELATIVE_URL_ROOT을 통해 구성 할 수있는 변수와 같지 않습니까? 이 경우 이미 너무 깊은 경로에만 다른 범위가 추가되기 때문입니다. 도우미는/app/app/stylesheets | javascript | images/... 등을 출력 할 것입니다. – Martin

+1

네,하지만 프록시에서 RAILS_RELATIVE_URL_ROOT를 설정하면 많은 일을하지 않을 것입니다. 문제는 귀하의 레일 앱이 범위가 있는지 여부를 알지 못하도록하는 것입니까? – sunkencity

+0

내 응용 프로그램이 WAR 파일에 의해 암시 적으로 범위가 지정되고 다른 범위가 추가되지 않음을 알고 싶습니다. – Martin

관련 문제