2017-02-09 9 views
1

У меня есть Nginx конф как:Различные behavour "местонахождение" и "proxy_pass" на Nginx X-Accel-перенаправлять

location ^~ /mount_points/mount_point1 { 
    internal; 
    alias /repos/mount_point_one; 
} 

location ^~ /to_proxy { 
    internal; 
    proxy_pass http://myproxy:5000; 
} 

Когда я прошу для 'http://localhost/mount_points/mount_point1/myfile.zip' я «/ хранилищу/mount_point_one/MYFILE .zip ", как ожидалось.

В то время как запрос на «http://localhost/to_proxy/myfile2.html», я получаю «http://myproxy:5000/to_proxy/myfile2.html».

В первом случае часть «/ mount_points/mount_point1» была удалена, а во втором случае часть «/ to_proxy» все еще существует, мне нужно подделать адрес «/ to_proxy» на восходящем сервере, чтобы узнайте это.

Я что-то пропустил? Если мне просто нужно переписать URL-адрес, как я могу удалить часть проблемы «/ to_proxy» на восходящем сервере?

спасибо.

ответ

2

Директива proxy_pass может выполнять функцию псевдонимов, но только при наличии дополнительного URI.

location ^~ /to_proxy/ { 
    internal; 
    proxy_pass http://myproxy:5000/; 
} 

Чтобы правильно сделать отображение псевдонима работу, задний / также добавляется к параметру location.

Для получения более подробной информации см. this document.

Если задняя / от параметра location вызывает проблемы, вы можете использовать вместо rewrite ... break:

location ^~ /to_proxy { 
    internal; 
    rewrite ^/to_proxy(?:/(.*))?$ /$1 break; 
    proxy_pass http://myproxy:5000; 
} 
+0

Спасибо @RichardSmith, завершающий '/' работал! – chenxin