web-dev-qa-db-ja.com

NGINXおよびAngular 2

現在のアプリユーザーのルートは、/ myapp /、/ myapp //、/ myaapp/dept /のようになります

私のアプリは現在、NGINXを使用して内部httpサーバーにデプロイされています。外部トラフィックを受け入れ、NGINXを実行し、内部サーバーに転送する他のサーバー。

私はドキュメントごとにindex.htmlにbaseref =/myappを追加しました

ユーザーが http://www.myexternalserver.com/myapp にアクセスすると、アプリは完全に機能します。ユーザーがページ内にいて、 http://www.myexternalserver.com/myapp/myparameter のような内部リンクをクリックすると、機能します。ブラウザのURLが変更され、ページが意図したとおりに表示されます。 Angular 2。

残念ながら、ユーザーがURLを直接入力すると: http://www.myexternalserver.com/myapp/myparameter 、NGINXによって404エラーが発生します。

NGINXの設定を構成する必要があると思いますが、NGINXの構成を変更する方法や、sites-available/default file /

18
Francis Zabala

これと同じ問題があり、解決策を見つけました。ただし、私のベース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;
        }
    }
}
41
Tyler Berry

私もここで問題を抱えていましたが、これはangular docs: https://angular.io/guide/deployment

NGinx:index.htmlを提供するように変更された、Front Controller Pattern Web Appsで説明されているtry_filesを使用します。

try_files $ uri $ uri//index.html;

7
David Pascoal

HostGator共有ホスティングでホストされているサイトのサブドメインでも同じ問題が発生しました。 Apache 2.2.31を実行しているようです。

周りを検索すると、最終的に "Apache Directives" になり、それが "Custom Error Responses" になりました。

サブドメインフォルダーに次の行を含む.htaccessファイルを作成することで、問題を修正できました。

ErrorDocument 404 /index.html

デバッグツールを調べても、成功した場合でも404コードが返されます。

UPDATE:

.htaccessを次のように変更することにより、404の問題を修正できました。

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になりました。

0
mikhail

これは、私の作業構成がどのように見えるかであり、受け入れられた答えとは少し異なります。フォルダー/usr/share/nginx/html/myappおよびindex.htmlベースパスにある私のプロジェクトには、ベースURLとして/ myapp /があります。

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