2017-09-28 7 views
0

私はang 2のアプリケーションであるnginxとdockerを使っています。毎回私はそれが私に与え/サイトでページをリロードしています私のサーバブロックは今、この権利のように見える404:私は多くのことを試してみましたが、他のすべてのstackoverflowの質問を見ていると、すべての可能性を試してみましたnginx.confのtry_filesが機能していません

server { 
listen 0.0.0.0:80; 
listen [::]:80; 

root /var/www/project/html; 

index index.html; 

server_name project.com; 

location/{ 
    try_files $uri $uri/ /index.html; 
}} 

。しかし、何も動作しません。誰かが助けてくれますか?

UPDATE: 全体nginx.conf:

user nginx; 
worker_processes auto; 

error_log /var/log/nginx/error.log warn; 
pid  /var/run/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    keepalive_timeout 65; 

    #gzip on; 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

サイト対応/デフォルト:

server { 
listen 0.0.0.0:80; 
listen [::]:80; 

root /var/www/project/html; 

index index.html; 

server_name project.com; 

location/{ 
    try_files $uri $uri/ /index.html; 
}} 

そしてDockerfile:あなたのnginx.confで

FROM nginx 

COPY ./docker/sites-enabled /etc/nginx/sites-enabled 
COPY ./docker/nginx.conf /etc/nginx/nginx.conf 
COPY ./dist /var/www/project/html 
COPY ./dist /usr/share/nginx/html 
EXPOSE 80 
+0

エラーログはありますか? – Moema

+0

@Moemaただエラーログがあります: 'リソースを読み込めませんでした:サーバーが404(Not Found)のステータスで応答しました'。他に何もない。 – vaman

+0

Nginxのエラーログは、nginx.confで設定できます(https://www.nginx.com/resources/admin-guide/logging-and-monitoring/を参照してください)。デフォルトでは/ var/log/nginx/ – Moema

答えて

0

2つの場所から追加の設定をロードしています:

include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*; 

sites.enabled/defaultの設定は、サーバー名がproject.comの2番目です。

しかし、最初の設定ではデフォルトの設定であるdefault.confがロードされます。これはデフォルトでnginxドッカーの画像の一部です。その設定は、あなたがlocalhostを使用してサイトにアクセスしようとした場合(あなたがSERVER_NAME project.comを指定し、それがlocalhostと一致していないので)、あなたのsites-enabled/defaultが使用されることはありませんので

server { 
    listen  80; 
    server_name localhost; 

    .... 

    location/{ 
     root /usr/share/nginx/html; 
     index index.html index.htm; 
    } 

    .... 
} 

に似ています。代わりに、要求はdefault.confで実行されます。サーバー名はlocalhostです。

そしてdefault.confに位置部分がある:

location/{ 
     root /usr/share/nginx/html; 
     index index.html index.htm; 
} 

あなただけlocalhostに行けば、index.htmlが提供され、すべてが期待どおりに動作しますが、意味します。しかし、すぐにlocalhost/somethingにアクセスしようとすると、Nginxは存在しないファイル/ディレクトリ/usr/share/nginx/html/something( - > 404)を見つけようとしています。

だから、選択肢を持っている:

  1. はあなたnginx.confからinclude /etc/nginx/conf.d/*.conf;を削除する(またはdefault.confを削除)し、localhostにごsites-enabled/defaultでSERVER_NAMEを変更。あなたの要求はあなたの設定に反映されます。

  2. sites-enabled/defaultのように、default.confの場所にtry_files $uri $uri/ /index.html;を追加してください。

私はdefault.confが含まれており、あなたのsites-enabled/configであなたのserver_namelocalhostには変更はありません、最初のソリューションをお勧めします。後で実際のドメインが必要な場合は、引き続き正規表現を使用してlocalhostまたはドメインのいずれかに一致させることができます。

+0

非常にありがとうございます。あなたは私の命を救う人です – vaman

関連する問題