2012-09-17 15 views
5

Sto cercando di riscrivere i collegamenti corpo di una pagina Proxied utilizzando qualcosa di simile:Nginx sub_filter riscrive?

sub_filter http://proxied.page.come http://local.page.com; 
    sub_filter_once off; 

È questo il modo di andare a tutti? Qual è la differenza tra sub_filter module e substitutions_filter

Inoltre, è possibile utilizzare la variabile nella delcaricazione sub_filter?

risposta

4

Idealmente, dovresti chiedere al backend di scrivere collegamenti corretti. Sebbene sia possibile correggere alcuni casi semplici utilizzando il filtro secondario, non è qualcosa di generalmente possibile (ad esempio se i dati restituiti non sono testo ma, ad esempio, codice flash).

È possibile utilizzare le variabili in una stringa di sostituzione in sub_filter (ma non in stringa da corrispondere in risposta originale), è esplicitamente documented:

Una stringa di sostituzione può contenere variabili.

Come per il filtro secondario: si tratta di un modulo di terze parti che dovrebbe essere più potente, sebbene possa contenere più bug. Finché il filtro secondario standard è sufficiente per te, probabilmente non vuoi usare un filtro secondario di terze parti.

8

Questo è un modo perfettamente valido per riscrivere i collegamenti su una pagina con proxy. "Il modulo ngx_http_sub_module è un filtro che modifica una risposta sostituendo una stringa specificata da un altro" (singola sostituzione)

Il terzo nginx_substitutions_filter è un modulo di filtro che può fare sia espressioni regolari e sostituzioni di stringhe fisse sui corpi di risposta

Quindi il modulo di terze parti può essere utilizzato per sostituire più stringhe, utilizzando espressioni regolari e variabili. ad es .:

subs_filter_types text/css text/xml; 
subs_filter http(s)?://(www.)?proxied.page.com/  http$1://$http_host/ r; 
subs_filter http(s)?://(www.)?proxied2.page.com/ http$1://$http_host/ r; 
Problemi correlati