nginx соответствует определенному файлу из другой папки на определенных маршрутах

У меня есть приложение angularjs, у него также есть блог. Этот URL показывает все сообщения блога под

http://example.com/blog/

И конкретные сообщения в блоге под

http://example.com/blog/example-blog-post-title

Теперь я предварительно компилирую HTML-сообщения в блоге для целей SEO, и я хочу обслуживать их полностью отдельно от моего основного приложения, например:

...
root "/home/ubuntu/client/public";

location / { ## Handle default requests ##
    try_files $uri $uri/ /index.html; 
}

location /blog { ## serve precompiled blog HTML
    alias /home/ubuntu/bloghtml;
    try_files $uri.html $uri/ index.html;
}
...

И это работает, если перейти на http://example.com/blog/example-blog-post-title nginx успешно обслуживает файл /home/ubuntu/bloghtml/example-blog-post-title.html

Однако проблема в том, что в этом случае nginx неправильно направляет список сообщений блога в http://example.com/blog/ в мое основное приложение angular, я получаю ошибку 403 по этому URL-адресу.

Я попытался изменить location /blog на location /blog/ в файле конфигурации, это заставляет http://example.com/blog/ работать , однако я получаю 404 ошибки на http://example.com/blog/example-blog-post-title

Как я могу заставить это работать для обоих случаев?


person IanDess    schedule 30.04.2016    source источник
comment
[Если я вас правильно понял] Если ваш URL содержит /blog (например: example.com/ blog/some-post.html) всегда будет обслуживаться из корня /home/ubuntu/bloghtml. Если вы хотите перенаправлять запросы в ваше угловое приложение, вам может потребоваться указать для него другую директиву местоположения.   -  person RaviTezu    schedule 01.05.2016


Ответы (1)


Если вы измените местоположение с /blog на /blog/, вам нужно не забыть изменить псевдоним с /home/ubuntu/bloghtml на /home/ubuntu/bloghtml/. Псевдоним и местоположение должны иметь одинаковое окончание, в противном случае вычисленные пути будут неправильными.

Я стараюсь не использовать alias и try_files в одном блоке из-за некоторых известных проблем. Вы можете подумать о том, чтобы сделать последний каталог в пути blog, чтобы вместо него можно было использовать root.


Я предполагаю, что ваше угловое приложение /index.html, и в этом случае ваше утверждение try_files неверно. $url/ заставит его попробовать /blog/index.html (при условии, что у вас есть действующая директива index), а index.html отсутствует ведущий /.

Я бы посоветовал вам попробовать:

location /blog {
    alias /home/ubuntu/bloghtml;
    try_files $uri.html /index.html;
}

но рассмотрите также возможность разработки директивы alias.

person Richard Smith    schedule 02.05.2016