nginx設定:index.html以外の静的ファイルをロードする方法

nginx設定:index.html以外の静的ファイルをロードする方法

Ubuntu 18.04.4 Desktopを使用してnginxからindex.html以外の静的ファイルをロードする方法を見つけようとしています。

/etc/nginx/conf.d/default.conf に次の行を追加しました。

server {
    location / {
        root /home/marco/webMatters/vueMatters/ggc/src/components/auth/weights;
    }
}

ただし、コンソールログに次のエラーが表示されます。 Uncaught (in Promise) SyntaxError: Unexpected token < in JSON atposition 0

githubの問題に関連する人によると、これはWebサーバーで提供されている静的ファイルの誤った設定に関連している必要があります。https://github.com/justadudewhohacks/face-api.js/issues/598#issuecomment-626346393

ここの指示に従ってください:https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/ /etc/nginx/conf.d/default.confの行を次のように修正しました。

server {
    root /home/marco/webMatters/vueMatters/ggc/src/components/auth/weights;

    location / {
        try_files $uri /weights/ssd_mobilenetv1_model-shard1;
    }
}

また、次の2つのオプションを追加してみました。

server {
    root /home/marco/webMatters/vueMatters/ggc/src/components/auth/weights;

    location / {
        sendfile on;
        tcp_nopush on;
        try_files $uri /weights/ssd_mobilenetv1_model-shard1;
    }
}

drwxr-xr-x 2ルートmarco 4,0K 4月7日、12:57

しかし、まだ問題があります。

アップデート1)

アップデート2)

/etc/nginx/conf.d/default.confの最初のサーバーブロックに位置/重みを追加しました。しかし、この場所の品質と正確さについては自信がありません。

server {
    listen 443 ssl http2 default_server;
    server_name ggc.world;
    ssl_certificate /etc/letsencrypt/live/ggc.world-
0002/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/ggc.world-
0002/privkey.pem; # managed by Certbot

    ssl_trusted_certificate /etc/letsencrypt/live/ggc.world/chain.pem;

    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by 
Certbot

    ssl_session_timeout 5m;
    #ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-    
    draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
    #ssl_stapling on;
    #ssl_stapling_verify on;

    access_log /var/log/nginx/ggcworld-access.log combined;

    add_header Strict-Transport-Security "max-age=31536000";
    location = /favicon.ico { access_log off; log_not_found off; }

    location / {
        proxy_pass http://127.0.0.1:8080;
        #proxy_pass http://127.0.0.1:2000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        #proxy_set_header Host $host;
    }

    location /weights {
      #sendfile on;
      #tcp_nopush on;
      #root /home/marco/webMatters/vueMatters/ggc/
/src/components/auth/weights;
      try_files $uri $uri/ /home/marco/webMatters/vueMatters/ggc/src
/components/auth/weights/ssd_mobilenetv1_model-shard1;
      proxy_pass http://127.0.0.1:9091/weights/;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      # Following is necessary for Websocket support
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }

}

ネットワーク経由で試しました。しかし、error.logは次のように言います。

2020/05/12 20:14:31 [error] 13354#13354: *1 connect() failed (111: 
Connection refused) while connecting to upstream, client: 
109.116.164.135, server: ggc.world, request: "GET /sockjs-
node/info?t=15893072$
2020/05/12 20:14:33 [error] 13354#13354: *1 connect() failed (111: 
Connection refused) while connecting to upstream, client: 
109.116.164.135, server: ggc.world, request: "GET /sockjs-
node/info?t=15893072$

アップデート3)

ここにある指示に従ってください。ディレクトリにファイルをロードしようとすると、Nginxは404を見つけることができません。すべての静的ファイルを/home/marco/wwwディレクトリに移動し、フォルダの所有権をrootに変更し、その内容のモードを755に変更しました。 sudo chown root www + sudo chmod 755 www

その後、/etc/nginx/conf.d/default.confの設定を次のように修正しました。

server {
    listen 443 ssl http2 default_server;
    server_name ggc.world;
    ssl_certificate /etc/letsencrypt/live/ggc.world-
0002/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/ggc.world-
0002/privkey.pem; # managed by Certbot

    ssl_trusted_certificate /etc/letsencrypt/live/ggc.world/chain.pem;

    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by 
Certbot

    ssl_session_timeout 5m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-
    draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:
!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;

    access_log /var/log/nginx/ggcworld-access.log combined;

    add_header Strict-Transport-Security "max-age=31536000";
    location = /favicon.ico { access_log off; log_not_found off; }

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
}

location /weights {
  try_files $uri $uri/ /home/marco/www/;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
}

}

しかし、URLを介して静的ファイルにアクセスしようとするとhttps://ggc.world/weights/mtcnn_model-weights_manifest.json"次のエラーが発生します: "キャッチされていない構文エラー: 予期しないトークン '<'"

ここに画像の説明を入力してください。

問題を解決するには?皆さんの親切なお手伝いをお待ちしております。表示

ベストアンサー1

location /weights静的ファイルをダウンロードするためにURIを使用して追加しました。/home/user/www/weights/foo.json/weights/foo.json

ファイルパスは、値とURIをroot関連付けて構成されます。したがって、URIが提供する部分にroot設定する必要があります。バラより/home/user/www/weights/foo.jsonこのファイルもっと学ぶ。

最も単純な形式は次のとおりです。

location /weights {
    root /home/user/www;
}

を使用すると、try_filesファイルが見つからないときに発生する状況を制御できます。ただし、パラメータはパス名ではなくURIと同じです。バラよりこのファイルもっと学ぶ。

たとえば、

location /weights {
    root /home/user/www;
    try_files $uri $uri/ =404;
}

両方の位置ブロックは本質的に同じ動作を有する。

おすすめ記事