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.