2012-08-05 73 views
1

安裝CGI代理我想設置一個代理的OpenLayers使用,所以我按照這些步驟:在Tomcat

  1. 從網上下載的OpenLayers網站上的proxy.cgi文件: http://trac.osgeo.org/openlayers/browser/trunk/openlayers/examples/proxy.cgi

  2. 修改proxy.cgi文件,包括我在allowedHosts列表域:

    allowedHosts = [ '本地主機:6901']

  3. 複製proxy.cgi文件到以下文件夾:

    $ TOMCAT_PATH $/webapps /目錄yourApp/WEB-INF/CGI/

  4. 通過將部分修改你的web應用程序的文件的web.xml下面。你會發現在

    $ TOMCAT_PATH $/webapps /目錄yourApp/WEB-INF/web.xml中的文件

點評:如果web.xml文件中不存在你的web應用,只需自己創建它或從另一個Web應用程序複製並修改它。 (創建!)

評論:「可執行」參數的「參數值」必須包含Python安裝的路徑。 (它!)

<servlet> 
     <servlet-name>cgi</servlet-name> 
     <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> 
    <init-param> 
     <param-name>debug</param-name> 
     <param-value>0</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cgiPathPrefix</param-name> 
     <param-value>WEB-INF/cgi</param-value> 
    </init-param> 
    <init-param> 
     <param-name>executable</param-name> 
     <param-value>c:\python25\python.exe</param-value> 
    </init-param> 
    <init-param> 
     <param-name>passShellEnvironment</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>5</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>cgi</servlet-name> 
    <url-pattern>/cgi-bin/*</url-pattern> 
    </servlet-mapping> 
  1. 通過添加以下元素修改你的web應用程序的文件context.xml中。你會發現在$TOMCAT_PATH$/webapps/yourApp/META-INF/context.xml

  2. 重新啓動Tomcat的文件

  3. 使用代理服務器的使用的OpenLayers,只是包含這個單行到您的代碼:

    OpenLayers.ProxyHost =「/ yourWebApp /的cgi-bin/proxy.cgi URL =?「;

但是當我嘗試使用它喜歡:

/webappname/cgi-bin/proxy.cgi?url=labs.metacarta.com 

我得到這個錯誤:

Some unexpected error occurred. Error text was: list index out of range 

我認爲它與os.environ [ 「REQUEST_METHOD」]但我相關不知道它的相關..

+2

你可以顯示你的代碼調用模塊和模塊代碼嗎? (如果可能?) – 2012-08-05 13:42:39

+0

更多信息。是需要的 - 你在CGI中運行嗎? - 如果是這樣 - 什麼等等......這將是很好的提供正確格式化的完整回溯。 – 2012-08-05 13:46:56

+0

那裏是更新說明 – 2012-08-05 18:52:43

回答

1

你在問一個未定義的環境變量。

您需要可以捕獲並處理異常或使用os.environ.get

try: 
    methodq = os.environ["REQUEST_METHOD"] 
except KeyError: 
    methodq = "default value" 

或者:

methodq = os.environ.get("REQUEST_METHOD", "default value") 
+0

這只是掩蓋了這個問題,雖然......如果它沒有設置(並且我正在刺探它在CGI環境中),那麼應該有一個「POST」,「HEAD」,「GET」等。 ..並且不能合理地默認...希望OP將澄清,雖然... – 2012-08-05 13:55:25

+1

同意,我們需要更多信息來解決實際問題。 – stderr 2012-08-05 13:58:08

1

您要提交:

/webappname/cgi-bin/proxy.cgi?url=labs.metacarta.com 

但proxy.cgi腳本試圖這樣做:

host = url.split("/")[2] 

嘗試http://labs.metacarta.com爲您的網址,因此proxy.cgi有一些斜線分裂,或修改它來解析URL有點聰明。

0

答案是:您不要在Tomcat上安裝或使用cgi代理。

cgi是用於作爲前端服務器的apache服務器或IIS。 Tomcat可能會坐在它後面。 Apache的配置詳述如下:http://tomcat.apache.org/tomcat-6.0-doc/proxy-howto.html

被警告,OpenLayers警告說,它的proxy.cgi只是一個例子,可能沒有足夠的檢查來阻止它被利用,即它可能運行一些惡意腳本。

如果您服務您的OpenLayers客戶端頁面上單獨的Tomcat,它包含其他的GeoServer或Mapserver的層,可以使用代理servlet並將其指定爲:

OpenLayers.ProxyHost =「sevlet服務器上的網址送達此頁面「;

http://wiki.apache.org/tomcat/ServletProxy

https://svn.openxdata.org/Experimental/openXmapper/trunk/gwt-openlayers-server/src/main/java/org/gwtopenmaps/openlayers/server/GwtOpenLayersProxyServlet.java

有反向代理或重寫sevlet解決了這一點。請在這些Google上。