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 문제에 관련된 사람들에 따르면 이는 웹 서버에서 제공되는 정적 파일의 잘못된 구성과 관련이 있어야 합니다.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;
}
}
또한 다음 두 가지 옵션을 추가해 보았습니다.
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)
지식이 부족하여 이 항목을 작성하고 싶습니다. 정적 파일 /home/marco/webMatters/vueMatters/GraspGlobalChances/src/comComponents/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
- 오류 로그는 다음과 같습니다. https://drive.google.com/open?id=1lwylAPCBqWV31jCocTLxLvnw9v2iSfl_
- 액세스 로그는 다음과 같습니다. https://drive.google.com/open?id=1HKIe8RQoLlwfGQ6FFYzN3WLZbaqjCVjM
업데이트 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 디렉토리로 이동하고 폴더의 소유권을 루트로 변경하고 해당 내용의 모드를 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;
}
두 위치 블록은 본질적으로 동일한 동작을 갖습니다.