2013-03-29 13 views
5

voglio raggiungere i seguenti obiettivi:Riscrivere ospite nginx e ProxyPass di calamari

Richiesta Host:

http://example.com.proxy.myserver.com

devono essere riscritti per

http://example.com

e passata a un server squid via nginx proxypass.

server { 
    listen 80; 
    server_name ~^(?<subdub>.*)\.proxy\.myserver\.com$; 
    location/{ 
    rewrite^$scheme://$subdub break; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Host $scheme://$subdub; 
    proxy_set_header Request-URI $scheme://$subdub; 
    proxy_pass http://localhost:3128; 
    proxy_redirect off; 
    } 
} 

Il problema è, che nginx reindirizza la richiesta immediatamente a http://example.com

Delle idee come ottenere questo lavoro?

risposta

1

301 il reindirizzamento è esattamente ciò che nginx deve fare con tale regola di riscrittura: poiché si inserisce $ scheme: // $ subdub nella parte di sostituzione, nginx eseguirà un 301, ignorando tale flag di "interruzione".

Se la stringa di sostituzione inizia con http: //, il client verrà reindirizzato e tutte le altre direttive di riscrittura verranno terminate.

Stai cercando di "riscrivere" o "reindirizzare"? Se è solo per la riscrittura, è possibile rimuovere tale direttiva riscrittura:

rewrite^$scheme://$subdub break; 

e funzionerà perché il server upstream potrebbe contare su l'intestazione host per determinare la destinazione del traffico (virtual hosting).

Anche l'intestazione host inviata al server upstream è errata. Dovrebbe essere

proxy_set_header Host $subdub; 

$ schema non dovrebbe essere messo nell'intestazione Host.

+0

Fantastico, grazie per la risposta. Funziona ora. – Sebastian