2013-03-11 2 views
0

Я знаю, что этот вопрос был asked before on SO, но у меня возникли проблемы с его тиражом на моем сервере.Карта URL-адрес субдомена (NGINX)

Что я пытаюсь сделать, когда пользователь переходит к medicine.example.com, субдомен должен быть сопоставлен с example.com/sites/medicine. Таким образом, URL-адрес пользователя - medicine.example.com. index.php удаляется через PHP.

Приведенный ниже код дает мне ошибку 502 bad gateway.

server { 
    listen  80; 
    listen  443 ssl; 
    server_name medicine.example.com; 

    location/{ 
     rewrite    ^([^.]*[^/])$ $1/ permanent; 
     proxy_pass_header Set-Cookie; 
     proxy_pass   https://example.com/sites$request_uri; 
    } 
} 

В идеале, решение будет подстановочные/регулярное выражение на основе таким образом, что больше, чем просто medicine.example.com может быть отображен. Мысли?

+0

Не будет ли значение 'proxy_pass' просто' https: //example.com/sites/medicine/$uri; 'работать (без перезаписи)? Кстати, вы смотрите на перенаправление или действительно на прокси? –

+0

@Jack спасибо, никуда не работает. также откуда взялись переменные '$ request_uri' или' $ uri'? Я этого никогда не понимал? –

+0

Я ** не ** хочу перенаправить URL. Я хочу сохранить это как есть, 'medicine.example.com'. Кстати, я не знаю, что такое прокси-сервер. –

ответ

0

Я считаю, что если вы хотите, чтобы URL-адрес в браузере оставался прежним, вам не нужно переписывать. Так что вам просто нужно это (у @Jack был дополнительный/перед $ uri).

$ схема должна возвращать HTTP или HTTPS в зависимости от того, что пользователь ввел

server { 
    listen  80; 
    listen  443 ssl; 
    server_name medicine.example.com; 

    location/{ 
     proxy_pass  $scheme://example.com/sites/medicine$request_uri 
} 

здесь ссылку на $ URI против $ REQUEST_URI. basicially $ uri не включает аргументы. http://wiki.nginx.org/HttpCoreModule#.24request_uri

+0

спасибо, но я пробовал это, не пошел –

+0

, что говорят ваши журналы? проблема может быть связана с вашим утверждением 'proxy_pass_header'. попробуйте 'proxy_pass_header Host $ host;' или даже 'proxy_pass_header Host example.com' Я думаю, вам нужно использовать add_header для файлов cookie. – haley

0

Дополнительный путь будет автоматически перенаправлен на восходящий сервер. Поэтому нет необходимости присоединять $ request_uri. Nginx прост.

location/{ 
    proxy_pass  http://example.com/sites/medicine 
} 

[править] также нет необходимости использовать протокол HTTPS для сервера вверх по течению, потому что это тратить ресурс для Ssl переговоров. Использовать http лучше, потому что ваш восходящий сервер является внутренним. Трафик безопасен.

Смежные вопросы