NGINX и Angular 2

Мои текущие пользователи приложения используют такие маршруты /myapp/, /myapp//, /myaapp/dept/

Мое приложение в настоящее время развернуто на внутреннем 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 или что поместить в файл sites-available/default / /

4 ответа

Решение

У меня была такая же проблема, и я нашел решение. Однако, мой базовый 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;
        }
    }
}

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

NGinx: используйте try_files, как описано в шаблонах веб-приложений Front Controller, измененные для обслуживания index.html:

try_files $ uri $ uri / /index.html;

Вот так выглядит моя рабочая конфигурация, немного отличающаяся от принятого ответа. Мой проект находится в папке /usr/share/nginx/html/myapp и index.html базовый путь имеет /myapp/ в качестве базового URL.

server {

  listen 80;

  sendfile on;

  default_type application/octet-stream;


  gzip on;
  gzip_http_version 1.1;
  gzip_disable      "MSIE [1-6]\.";
  gzip_min_length   256;
  gzip_vary         on;
  gzip_proxied      expired no-cache no-store private auth;
  gzip_types        text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  gzip_comp_level   9;


  root /usr/share/nginx/html;


  location / {
    try_files $uri$args $uri$args/ $uri/ /myapp/index.html =404;
  }

}

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

Поиск в конечном итоге привел меня к "Директивам Apache", которые привели меня к "Пользовательским ответам об ошибках".

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

ErrorDocument 404 /index.html

Несмотря на то, что я смотрю на инструменты отладки, я все равно получаю код 404, даже если он успешен.

ОБНОВИТЬ:

Был в состоянии исправить проблему 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.

Другие вопросы по тегам