2016-03-09 7 views
0

У меня есть URL-адрес, как это: https://www.vagrant.something.com/cdn/util/thumb/100/100/dev-profile-images/444ba5eacba004cb31dabbb5d5cda3ce9b2c84f4.jpg и у меня есть конфигурации Nginx с места так:Nginx расположение не соответствует

location /cdn/ { 
    proxy_pass http://cdn-vagrant.something.com/; 
} 

Моя проблема заключается в том, что он должен выполнить proxy_pass, чтобы получить обратно изображение, но местоположение не совпадает с URL-адресом, в чем проблема? Если я использую это:

location/{ 
    proxy_pass http://cdn-vagrant.something.com/; 
} 

И открыть ссылку он работает правильно, но в данном случае это proxy_pass по всему запросу.

ответ

1

Удалить слэш:

location /cdn/ { 
    proxy_pass http://cdn-vagrant.something.com; 
} 

Таким образом, URI запроса будет передан бакэндом как есть.

Когда proxy_pass содержит путь (даже один /), этот путь заменяет путь местоположения (/cdn/ в вашем случае) в прокси-запросе.

UPD:
Ваш бэкенд (cdn-vagrant.something.com) настроен на возврат постоянный редирект для /cdn/ -> /. Это означает, что ваша директива proxy_pass была верна, вы должны пройти /cdn/ запросов к / на бэкэнд. Это должны работы:

location /cdn/ { 
    proxy_pass http://cdn-vagrant.something.com/; 
} 

Единственное, что я не уверен, что это те if блоки в вашей www.vagrant.something.com конфигурации. Попробуйте тестирование без них, потому что if is evil. И вам следует избегать блоков, таких как if (-f $request_filename) и if (!-e $request_filename), возможно вместо этого использовать try_files.

+0

Я пробовал, и я пробовал каждый случай, что вы можете себе представить, хотите ли вы посмотреть мою конфигурацию? – PumpkinSeed

+0

OK, показать полную конфигурацию. – Roman

+0

Вот два виртуальных хоста http://pastebin.com/tG2dLQsz – PumpkinSeed