2013-03-29 3 views
5

Я хочу, чтобы достичь следующего:Перепишите Nginx хозяина и ProxyPass кальмаров

Запрос Ведущий:

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

должны быть переписаны

http://example.com

и прошел к squid-сервер через 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; 
    } 
} 

Проблема заключается в том, что Nginx перенаправляет этот запрос немедленно к http://example.com

Любые идеи, как получить эту работу?

ответ

1

301 redirect - это именно то, что nginx будет делать с этим правилом перезаписи: поскольку вы добавляете $ subst: // $ subdub в заменяемую часть, nginx будет делать 301, игнорируя этот флаг «break».

Если сменная строка начинается с http: //, то клиент будет перенаправлен, и любые последующие директивы перезаписи будут завершены.

Вы пытаетесь «переписать» или «перенаправить»? Если это только для переписывания, вы можете удалить эту переписать директиву:

rewrite^$scheme://$subdub break; 

и он будет работать, потому что ваш сервер вверх по течению может полагаться на заголовке HOST для определения целевого трафика (виртуальный хостинг).

Также ваш заголовок хоста, отправленный на восходящий сервер, неверен. Это должно быть

proxy_set_header Host $subdub; 

Схема $ не должна помещаться в заголовок хоста.

+0

Прохладный, спасибо за ваш ответ. Работает сейчас. – Sebastian