2015-01-13 93 views
1

我正在用AngularJS開發一個NodeJS應用程序。 爲了測試,我想在運行apache2 web服務器的web服務器上託管它。 谷歌搜索,並嘗試和錯誤給我帶來了這樣的事實,我需要簡單地讓Apache與轉發代理模塊的請求:如何正確使Apache代理服務器能夠正常使用NodeJS?

<Location /someurl> 
    ProxyPass http://mydomain:3000/ 
    ProxyPassReverse http://mydomain:3000/ 
</Location> 

但不幸的是,我無法看到的頁面。 訪問someurl給我一個空白頁面,其中沒有加載javaScript。

節點調試日誌: GET/200 1.680 ms - 1687

當我訪問通過端口3000的服務器我得到以下日誌:

GET/304 53.814 ms - - 
GET /javascripts/directives.js 200 14.369 ms - 6521 
GET /javascripts/services.js 200 8.532 ms - 2054 
GET /stylesheets/bootstrap.min.css 304 4.173 ms - - 
GET /stylesheets/lmm.css 304 4.131 ms - - 
GET /javascripts/jquery.min.js 304 4.203 ms - - 
GET /javascripts/bootstrap.min.js 304 2.060 ms - - 
GET /javascripts/angular.min.js 304 2.486 ms - - 
GET /javascripts/angular-route.min.js 304 2.562 ms - - 
GET /javascripts/angular-translate.min.js 304 2.643 ms - - 
GET /javascripts/app.js 304 2.526 ms - - 
GET /javascripts/controller.js 304 2.768 ms - - 
GET /javascripts/translations.js 304 1.368 ms - - 
GET /partials/footer.html 304 2.391 ms - - 
GET /partials/home.html 304 2.202 ms - - 
GET /fonts/glyphicons-halflings-regular.woff 304 1.602 ms - - 

下面是從acces.log有關的一切:

myIP - - [13/Jan/2015:10:01:19 +0100] "GET /someurl HTTP/1.1" 200 852 "-" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /stylesheets/bootstrap.min.css HTTP/1.1" 404 513 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /stylesheets/lmm.css HTTP/1.1" 404 504 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/jquery.min.js HTTP/1.1" 404 509 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/bootstrap.min.js HTTP/1.1" 404 513 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/angular.min.js HTTP/1.1" 404 510 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/angular-route.min.js HTTP/1.1" 404 517 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/angular-translate.min.js HTTP/1.1" 404 520 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/controller.js HTTP/1.1" 404 509 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/app.js HTTP/1.1" 404 503 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/directives.js HTTP/1.1" 404 510 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/services.js HTTP/1.1" 404 507 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/translations.js HTTP/1.1" 404 511 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/bootstrap.min.js HTTP/1.1" 404 512 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/angular.min.js HTTP/1.1" 404 510 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/angular-route.min.js HTTP/1.1" 404 516 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/angular-translate.min.js HTTP/1.1" 404 520 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/app.js HTTP/1.1" 404 502 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/controller.js HTTP/1.1" 404 509 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/directives.js HTTP/1.1" 404 509 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/services.js HTTP/1.1" 404 507 "http://mydomain/someurl" 
myIP - - [13/Jan/2015:10:01:19 +0100] "GET /javascripts/translations.js HTTP/1.1" 404 511 "http://mydomain/someurl" 

如何讓Apache正確轉發請求?

+0

任何更改都可以從apache發佈訪問日誌? – bennettp123

+0

我已加入 – nesreka

回答

2

來自bennettp123的評論指出了我的正確方向。

Apaches access.log文件顯示javaScript文件和 樣式表有404個錯誤。

添加他們的位置指令之前的別名解決了這個問題:

Alias /javascripts "<path_to_node_project>/public/javascripts" 
Alias /stylesheets "<path_to_node_project>/public/stylesheets" 
Alias /partials "<path_to_node_project>/public/partials" 
+0

不錯的解決方案。我沒有想到這一點。 :) – bennettp123

+0

謝謝。是我想起來的第一件事。 – nesreka

+1

值得一提的是,如果您有多個應用程序在代理之後運行,則此解決方案不會擴展。例如,如果兩個應用程序都返回指向'/ stylesheets'的URL,則無法分辨它們之間的區別。 – bennettp123

0

按照DOCO爲ProxyPassReverse

只有HTTP響應上面特別提到頭將被改寫。 Apache不會重寫其他響應頭,也不會重寫HTML頁面內的URL引用。這意味着如果代理內容包含絕對URL引用,它們將繞過代理。將查看HTML並重寫URL引用的第三方模塊是Nick Kew的mod_proxy_html

這就是發生在你的情況。反向代理正在轉發初始的/someurl請求。但是,NodeJS應用程序返回URL中沒有/someurl的URL,並且它們不與ProxyPass和ProxyPassReverse指令相匹配。

有幾個選項:

  • 使用類似mod_proxy_html,提到由Apache DOCO上述
  • Alias所有路徑(如above
  • 充分利用的NodeJS應用程序返回相對URL(例如stylesheets/bootstrap.min.css
  • 向NodeJS應用程序添加一個「反向代理」選項,並預先爲所有請求指定反向代理路徑。
+0

謝謝你澄清這一點。沒有找到Doc的這部分。 :d – nesreka

相關問題