Apache: posso creare un server proxy con Apache?

Ho un sacco di sottodomini in un singolo server:

  • a.example.com
  • b.example.com
  • news.example.com

Tutti sono nello stesso virtualhost di Apache.

Devo utilizzare un feed fornito dal sottodominio delle notizie all'interno del sottodominio aeb. I feed in genere hanno questo aspetto:

  • news.example.com/news/a
  • news.example.com/news/b

Nei sottodomini aeb, sto utilizzando la function Ajax di jquery per caricare i dati dai feed di notizie e presentarli su aeb. Inizialmente questo non ha funzionato, a causa della politica della stessa origine .

Sono stato in grado di sovrascrivere questo aggiungendo Access-Control-Allow-Origin "*" al mio file di configuration di Apache.

… ma funziona solo con Firefox, Chrome e Safari. Internet Explorer sembra ignorare questa direttiva.

Quindi, ho bisogno di creare un proxy.

Quello di cui ho bisogno è una nuova directory in tutti i miei sottocomandi (ad esempio /proxy ) che Apache rileva e reindirizza a news.example.com, indipendentemente dal sottodominio. Così:

  • a.example.com/proxy/news/a -> restituisci il contenuto di news.example.com/news/a
  • b.example.com/proxy/news/b -> restituisce il contenuto di news.example.com/news/b

Posso farlo direttamente nei sottomoduli di Apache + (ad esempio, mod_rewrite), o devo usare un linguaggio di scripting come PHP per fare questo?

Vuoi la direttiva ProxyPass .

 ProxyPass /proxy/news/a http://news.example.com/news/a 

Alla fine siamo riusciti a creare il proxy usando una combinazione di due moduli: mod_rewrite e mod_proxy .

La syntax era la seguente:

 rewriteEngine on rewriteRule proxy/(.+)$ http://news.example.com/$1 [P] 

La [P] alla fine sta dicendo che la regola "agisce come un proxy" e non funziona senza mod_proxy. Senza di esso, apache effettua un "reindirizzamento" (l'URL nella parte superiore della pagina cambia) anziché "serve solo la pagina".

Apache può essere configurato per utilizzare apache:

considera questo codice di esempio funzionante (parte proxy):

 <VirtualHost *:80> ServerAdmin [email protected] ServerName ci.testserver.com ServerAlias ci ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPreserveHost on ProxyPass / http://localhost:8080/ </VirtualHost>