2012-10-23 68 views
2

我想使用jetty提供的透明代理。碼頭透明代理總是返回403禁止

這是我的web.xml

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="WebApp_9" 
    version="2.4" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

<display-name>Archetype Created Web Application</display-name> 

<servlet> 
    <servlet-name>googleProxy</servlet-name> 
    <servlet-class>org.eclipse.jetty.servlets.ProxyServlet$Transparent</servlet-class> 
    <init-param> 
     <param-name>ProxyTo</param-name> 
     <param-value>http://www.google.com</param-value> 
    </init-param> 
    <init-param> 
     <param-name>Prefix</param-name> 
     <param-value>/google</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>googleProxy</servlet-name> 
    <url-pattern>/google/*</url-pattern> 
</servlet-mapping> 

,這是pom.xml中(我使用maven):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>JettyProxySample</groupId> 
<artifactId>JettyProxySample</artifactId> 
<packaging>war</packaging> 
<version>1.0</version> 
<name>JettyProxySample Maven Webapp</name> 
<url>http://maven.apache.org</url> 
<dependencies> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlets</artifactId> 
     <version>7.0.0.M4</version> 
    </dependency> 
</dependencies> 
<build> 
    <finalName>JettyProxySample</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>maven-jetty-plugin</artifactId> 
      <version>6.1.10</version> 
      <configuration> 
       <scanIntervalSeconds>10</scanIntervalSeconds> 
       <stopKey>foo</stopKey> 
       <stopPort>9999</stopPort> 
      </configuration> 
      <executions> 
       <execution> 
        <id>start-jetty</id> 
        <phase>pre-integration-test</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
        <configuration> 
         <scanIntervalSeconds>0</scanIntervalSeconds> 
         <daemon>true</daemon> 
        </configuration> 
       </execution> 
       <execution> 
        <id>stop-jetty</id> 
        <phase>post-integration-test</phase> 
        <goals> 
         <goal>stop</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

我希望代理轉發這樣的請求:

http://localhost:8080/JettyProxySample/google/search?q=hello 

這樣:

http://www.google.com/search?q=hello 

但是當我嘗試在瀏覽器的網址,我總是得到這樣的:

HTTP ERROR: 403 

FORBIDDEN 
RequestURI=/JettyProxySample/google/search 

Powered by Jetty:// 

任何想法?

+0

爲什麼使用透明代理。什麼IP地址? –

+0

@Roman C我只是想弄清楚如何使用它。對不起,您的意思是「什麼IP地址?」? – CuiPengFei

+0

對於這個問題,你需要閱讀文件。 –

回答

2

只是爲了在這裏折騰答案,不要使用已有幾年的里程碑版本。

  • 7.6.7.v20120910爲jetty7
  • 8.1.7.v20120910爲jetty8

我知道很多使用兩個版本的代理Servlet成功,只是沒有東西是從人的最初從codehaus遷移到eclipse ......當時有大量的代碼流失,所以如果這不能正確地爲你工作,我不會感到驚訝。

0

閱讀源代碼有幫助。 :)

的問題是,你沒有你的代理servlet集是在網絡 服務器的根目錄,而是一個應用程序內部,因此您的前綴參數需要 包括整個前綴,上下文名稱Web應用程序包括...

前綴/ YOUR_WEB_APP_CONTEXT /谷歌

see also