Ubuntu18.04.4デスクトップを使用して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 in position 0
これは、githubの問題に介入した人々によると、静的ファイルを提供するためのWebサーバーの設定ミスに関連しているはずです: https://github.com/justadudewhohacks/face-api.js/ issues/598#issuecomment-62634639
ここでの指示に従います: 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-x2ルートマルコ4,0Kapr 712:57ウェイト
しかし、それでも問題が発生しました
アップデート1)
記入したい知識が不足しているため、静的ファイル/ home/marco/webMatters/vueMatters/GraspGlobalChances/src/components/auth/weightsにアクセスできるかどうかを確認するために使用する特定のURLが明確ではありません。/ssd_mobilenetv1_model-shard1
私はlocalhost/sd_mobilenetv1_model-shard1.htmlで試しました:
https://drive.google.com/open?id=14YkcqCd_FAax9BYBnGZXBQsi4NZ3wUnC
これはnginx -Tの出力です: https://drive.google.com/open?id=1eTry9p4RLHWFDaHS3QiPhzeEwIFADR4Y
アップデート2)
/etc/nginx/conf.d/default.confで、最初のサーバーブロックに場所/ weightsを追加しました。しかし、私はこの場所の品質と正確さについてはよくわかりません。
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に移動し、このフォルダの所有権をルートに変更しました。コンテンツのmodを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 "を介して静的ファイルにアクセスしようとすると、次のエラーが発生します: "Uncaught Syntax Error:Unexpected token '<' 「」
問題を解決する方法は?あなたの親切な助けを楽しみにしています。マルコ
location /weights
を追加して、URI /home/user/www/weights/foo.json
を使用して/weights/foo.json
に静的ファイルをダウンロードしました。
ファイルへのパスは、root
の値をURIと連結することによって作成されます。したがって、/home/user/www
部分はURIによって提供されるため、root
を/weights/foo.json
に設定する必要があります。詳細は このドキュメント を参照してください。
最も単純な形式は次のとおりです。
location /weights {
root /home/user/www;
}
try_files
を使用すると、ファイルが見つからない場合の動作を制御できます。ただし、パラメータはパス名ではなくURIのようなものです。詳細は このドキュメント を参照してください。
例えば:
location /weights {
root /home/user/www;
try_files $uri $uri/ =404;
}
2つのロケーションブロックの動作は基本的に同じです。