2016-08-17 4 views
14

Мои текущие пользователи приложения маршруты, как это/MyApp /,/MyApp //,/myaapp/отдел/NGINX и угловые 2

Мое приложение в настоящее время развернута во внутреннем сервере HTTP с NGINX. Другой сервер, который принимает внешний трафик, также запускает NGINX и перенаправляет его на внутренний сервер.

У меня есть добавить baseref =/MyApp на index.html согласно документации

Если пользователь переходит к http://www.myexternalserver.com/myapp, приложение работает отлично. Если пользователь находится внутри страницы и нажимает на внутреннюю ссылку, такую ​​как http://www.myexternalserver.com/myapp/myparameter, она работает. URL-адрес браузера изменяется, страница отображается по назначению. Я предполагаю, что это обработано Angular 2.

К сожалению, если пользователь напрямую вводит URL-адрес: http://www.myexternalserver.com/myapp/myparameter, появляется ошибка 404, сделанная NGINX.

Я думаю, что я должен настроить параметры Nginx, но я не знаю, как следует изменить конфигурации или что положить в/файл по умолчанию сайты-доступных Nginx в/

+0

Я считаю, что никто не знает, как изменить вашу конфигурацию, так как вы ее нам не показали. – VBart

ответ

35

Я просто имел такую ​​же проблему и нашли решение , Однако моя база href равна «/».

Ниже мой nginx.conf:

worker_processes 1; 

events { 
    worker_connections 1024; 
} 

http { 
    include  mime.types; 
    default_type application/octet-stream; 
    sendfile  on; 
    keepalive_timeout 65; 

    server { 
     listen  80; 
     server_name mysite.com www.mysite.com; 
     root /usr/share/nginx/html; 

     location/{ 
      try_files $uri$args $uri$args/ /index.html; 
     } 
    } 
} 
+0

Этот ответ привел меня к другому вопросу. Это для сервера позади NGINX, размещающего Угловые файлы. –

+0

Это помогло мне как переписывать URL, так и обратный прокси.Поэтому я использовал один блок местоположения для корневого «/» приложения и другой блок местоположения для «/ api /» обратного прокси. –

+0

Кто-нибудь знает, как настроить это, если вы не хотите, чтобы ваше имя_сервера было жестко закодировано? Например, я использую докер, и он должен работать как для localhost, так и для производственного URL. –

0

Я была такая же проблема с поддомена на сайт, размещенный с HostGator хостинга. Кажется, он работает Apache 2.2.31.

Поиск в конце концов привел меня к "Apache Directives", что привело меня к "Custom Error Responses".

я был в состоянии исправить мою проблему, создав .htaccess файл в моей папке подобласти с помощью следующей строки в нем:

ErrorDocument 404 /index.html 

Хотя, глядя на инструменты отладки, я все еще получаю 404 код возвращается даже если это удается.

UPDATE:

был в состоянии исправить 404 проблему путем изменения моего .htaccess на следующее:

RewriteEngine On 
    # If an existing asset or directory is requested go to it as it is 
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] 
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d 
    RewriteRule^- [L] 

    # If the requested resource doesn't exist, use index.html 
    RewriteRule^/index.html 

Теперь я правильно перенаправляют index.html и код 200.

3

Я также проблемы здесь, теперь это предусмотрено в угловых Docs: https://angular.io/guide/deployment

Nginx: используйте try_files, как описано в Front Controller Pattern Web Apps, модифицирована служить index.html:

try_files $ $ URI URI//index.html;