2016-07-13 5 views
1

Apache 프록시 뒤에 시약 웹 앱을 실행하여 HTTPS를 시약 앱을 실행하는 HTTP Jetty 서버로 전달하려고합니다. 다음은 Apache 규칙입니다.Apache 프록시 뒤에있는 시약 앱이 렌더링되지 않습니다.

ProxyPass /bookmarx http://localhost:3000 
ProxyPassReverse /bookmarx http://localhost:3000 

로컬로 실행하면 앱이 잘 실행됩니다 (예 : http : // localhost : 3000). 그러나 Apache 서버를 통해 앱을 실행하면 (예 : https : // example.com/bookmarx이면 HTML 시작 페이지 (즉, 아래의 코드 스 니펫이있는 페이지) 만 반환되고 Javascript (core/init!)는 실행되지 않으므로 빈 페이지가 표시됩니다. 흥미롭게도, 나는 그 뒤에 Clojure 서비스를 호출 할 수있다. https://example.com/bookmarx/api/bookmarks 그리고 북마크를 반환하므로 프록시가 요청을 전달하지만 ClojureScript가 실행되고 있지 않습니다.

나는 다시 쓰기 규칙과 x-forwarded-proto 헤더를 가지고 놀았지만 아무런 차이가없는 것처럼 보였다.

Apache 서버가 HTTPS가 아닌 HTTP를 사용하도록 구성하면 동일한 결과가 발생하므로 SSL 간섭이 발생하지 않습니다.

프록시를 통해 앱을 실행하려면 무엇을해야합니까?

+0

내 문제가 페이지가 core.async를 사용하여 렌더링 전에 책갈피를로드하도록 호출한다는 사실과 관련이 있는지 궁금해지기 시작했다. localhost 부두 서버로 직접 가면 결과가 반환 될 때까지 차단됩니다. 그러나 프록시를 통과 할 때 결과가 반환되기 전에 페이지를 렌더링하지 못하도록 차단하지 않습니다. 나는 이것이 실제로 문제가된다면 이것을 해결하는 방법을 잘 모른다. – brown131

답변

1

원칙적으로 HTTPS는 중요하지 않습니다. 브라우저가 자산 (HTML + javascript 파일)을 가져올 수있는 유일한 중요한 점은 javascript가 올바른 것입니다.

먼저 브라우저 개발자 콘솔 (보기 -> 개발자 -> 자바 스크립트 콘솔)을 열고 오류를 찾으십시오. 자바 스크립트 파일이로드되었는지 확인하려면 네트워크 탭을 확인하십시오.로드 된 자바 스크립트가 HTML 소스를보고 클릭하거나 자바 스크립트에 대한 링크를 포함하는지 확인하는 또 다른 방법입니다.

여기에 몇 가지 확인할 수 있습니다

  1. 은 JS/app.js 넣었습니까? https://example.com/js/app.js (색인 페이지의 루트는 js의 루트와 일치 함)로 이동해보십시오. 때로는 구성으로 인해 호스트에 배포 할 때 자산이 다른 경로에서 제공되는 경우가 있습니다.
  2. 최적화 된 최적화를 사용하여 배포 된 app.js가 컴파일됩니까? 상황이 잘못 될 수 있습니다! 이 빌드를 배제하려면 배포 빌드에서 advancedwhitespace으로 바꾸어보십시오. 이게 문제라면, 아마 자바 스크립트의 일부가 빠져있을 것이다. dev 빌드를 배포하는 경우 out 컴파일 파일도 배포해야합니다. prod 빌드가있는 경우 로컬 빌드를 lein cljsbuild once prod으로 테스트 할 수 있습니다.

  3. 자바 스크립트 콘솔에 오류가보고 되었습니까? 좋은 단서가있을 수 있습니다.

+0

제안 해 주셔서 감사합니다. 1. js/app.js를로드 할 수 있으며 페이지를 열려고 시도 할 때 js 콘솔에로드 된 것으로 표시됩니다. 2. 시도해 보았습니다 : 공백과 불행히도 아무런 차이가 없었습니다. 나는 아파치 프록시를 통해 갈 때 내가보고 오전 JS 콘솔에서 3. 오류는 다음과 같습니다 (bookmarx.route.current_page에서) '오류 렌더링 구성 요소는 오류 : 어설 실패 : 잘못된 히컵 양식 : [전무] (bookmarx.route.current_page에서) (valid-tag? tag)' 나는 프록시를 통과하기 때문에 렌더링 할 수없는 것이 확실하지 않습니다. – brown131

+0

몇 가지 코드를 게시 할 수 있습니까? 조건부로 태그를 지정하는 구성 요소가있는 것처럼 보입니다. 그러나 조건은 비어 있습니다. 예를 들어'[(when condition : div) "ok"]'는 실행중인 컨텍스트에 있습니다. 모든 구성 요소 참조에서 누락 될 수있는 사례가 없는지 확인합니다. –

0

동일한 문제로 나는 문제가 없어 질 때까지 더 많은 규칙을 적용했습니다.

ProxyPassReverse /api http://0.0.0.0:3001/api 
ProxyPass /api http://0.0.0.0:3001/api 

내가 사용하고 Untangled, 도서관보다 프레임 워크의 더이 내가이/API를 가졌다 문제에 사용되는 것입니다. Chrome 개발자 콘솔에서 오류에 대해 알려 주었을 때 실제로 실제로 처음으로 실현 된 것은 /api입니다.

+0

다행히도/api에 문제가 없습니다. 페이지가 렌더링되지 않아도 일관되게 결과를 반환합니다. – brown131

0

문제를 추적했습니다. 비서/계좌 경로가 잘못되어 생긴 결과입니다. "/"경로를 찾고 있는데, 이는 로컬 일 때 정확하지만 원격 URL에는 "/ bookmarx /"가 있습니다. 그래서 "/ bookmarx /"로 경로를 변경했을 때 제대로 작동했습니다. 아파치가 URL을 다시 쓰고 있다고 가정하고 있었다.

(이 단순하고 단순한 대답을 이해하기 위해서는 철저히 후퇴 과정이 필요했습니다.) 뒤늦은 견해와 함께 곧바로 코드를 게시 할 수 있었을 것입니다. 또 다른 눈으로 보았을 것입니다. 모두의 도움을 위해.)

관련 문제