web-dev-qa-db-fra.com

NGINX et Angular 2

Les itinéraires de mes utilisateurs actuels d'application tels que ceci/myapp /,/myapp //,/myaapp/dept /

Mon application est actuellement déployée sur un serveur http interne avec NGINX. L'autre serveur qui accepte le trafic externe exécute également NGINX et le transmet au serveur interne.

J'ai ajouté baseref =/myapp à l'index.html conformément à la documentation.

Si l'utilisateur va sur http://www.myexternalserver.com/myapp , l'application fonctionne parfaitement. Si l'utilisateur est dans la page et clique sur un lien interne tel que http://www.myexternalserver.com/myapp/myparameter , cela fonctionne. L'URL dans le navigateur change, la page est affichée comme prévu. Je devine qu'il est traité par Angular 2.

Malheureusement, lorsqu'un utilisateur tape directement l'URL: http://www.myexternalserver.com/myapp/myparameter , je reçois une erreur 404 commise par NGINX.

Je pense que je dois configurer les paramètres NGINX mais je ne sais pas comment modifier la configuration de NGINX ni quoi mettre dans le fichier sites-available/default /

17
Francis Zabala

Je viens d'avoir ce même problème et trouvé une solution. Ma base href est "/", cependant.

Ci-dessous mon 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;
        }
    }
}
40
Tyler Berry

J'avais aussi des problèmes ici, cela est maintenant envisagé dans la documentation angulaire: https://angular.io/guide/deployment

NGinx: utilisez try_files, comme décrit dans Applications du modèle de contrôleur frontal, modifiées pour servir index.html:

try_files $ uri $ uri//index.html;

7
David Pascoal

J'ai eu le même problème avec un sous-domaine sur un site hébergé avec l'hébergement partagé HostGator. Il semble que cela fonctionne avec Apache 2.2.31.

La recherche autour de moi m'a finalement conduit à "Directives Apache" , ce qui m'a conduit à "Réponses d'erreur personnalisées" .

J'ai pu résoudre mon problème en créant un fichier .htaccess dans mon dossier de sous-domaine contenant la ligne suivante:

ErrorDocument 404 /index.html

Bien que je regarde les outils de débogage, un code 404 est toujours renvoyé même s’il réussit.

METTRE À JOUR:

A été en mesure de résoudre le problème 404 en modifiant mon .htaccess comme suit:

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

Maintenant, je suis correctement redirigé vers index.html et le code est 200.

0
mikhail

Voici à quoi ressemble ma configuration de travail, légèrement différente de la réponse acceptée. Mon projet situé dans le dossier /usr/share/nginx/html/myapp et le chemin de base index.html a/myapp/as url de base.

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;
  }

}
0
Balkrishna