저는 Let's encrypt SSL 인증서를 사용하여 Nginx 프록시 뒤에 있는 OVH vps에서 MeteorJs 애플리케이션을 실행하고 있습니다.
이전에는 heroku를 사용하여 애플리케이션을 호스팅했습니다.
지금 문제가 생겼습니다. Chrome에서는 콘솔 로그에 다음 오류 메시지가 "자주" 표시됩니다.Uncaught SyntaxError: Unexpected end of input
웹서핑을 해보니 캐시와 관련된 내용이라 캐시를 삭제해야 한다는 질문이 많습니다.
문제는 이 작업(ctrl+f5 또는 Chrome 도구 패널 사용)이 때때로 작동하지만 매우 무작위로 보이고 간단한 새로 고침으로 인해 오류가 다시 발생한다는 것입니다.
솔루션을 탐색하는 동안 본 몇 줄을 추가하기 위해 Nginx .conf를 수정했습니다.
server_tokens off; # for security-by-obscurity: stop displaying nginx version
# this section is needed to proxy web-socket connections
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# HTTP
server {
listen 80 default_server; # if this is not a default server, remove "default_server"
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html; # root is irrelevant
index index.html index.htm; # this is also irrelevant
server_name www.talkalang.com talkalang.com; # the domain on which we want to host the application. Since we set "default_server" previously, nginx will answer all hosts anyway.
# redirect non-SSL to SSL
location / {
rewrite ^ https://$server_name$request_uri? permanent;
}
}
# HTTPS server
server {
listen 443 ssl; # we enable SPDY here
server_name www.talkalang.com talkalang.com; # this domain must match Common Name (CN) in the SSL certificate
root html; # irrelevant
index index.html; # irrelevant
ssl_certificate /etc/letsencrypt/live/talkalang.com/fullchain.pem; # full path to SSL certificate and CA certificate concatenated together
ssl_certificate_key /etc/letsencrypt/live/talkalang.com/privkey.pem; # full path to SSL key
# performance enhancement for SSL
ssl_stapling on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
# safety enhancement to SSL: make sure we actually use a safe cipher
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-$
# config to enable HSTS(HTTP Strict Transport Security) https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security
# to avoid ssl stripping https://en.wikipedia.org/wiki/SSL_stripping#SSL_stripping
add_header Strict-Transport-Security "max-age=31536000;";
# If your application is not compatible with IE <= 10, this will redirect visitors to a page advising a browser update
# This works because IE 11 does not present itself as MSIE anymore
if ($http_user_agent ~ "MSIE" ) {
return 303 https://browser-update.org/update.html;
}
# pass all requests to Meteor
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; # allow websockets
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP
proxy_set_header X-Forwarded-Proto https;
# this setting allows the browser to cache the application in a way compatible with Meteor
# on every applicaiton update the name of CSS and JS file is different, so they can be cache infinitely (here: 30 days)
# the root path (/) MUST NOT be cached
if ($uri != '/') {
#expires 30d;
}
add_header Cache-Control no-cache;
proxy_cache off;
expires off;
}
}
제가 추가한 줄은 다음과 같습니다.
add_header Cache-Control no-cache;
proxy_cache off;
expires off;
그리고 여전히 문제를 해결하지 못했습니다. 저는 전혀 모릅니다. 저는 admin sys와 ubuntu, 특히 nginx에 익숙하지 않습니다.
문제는 기술적인 지식이 없는 수백 명의 사람들이 매일 이 앱을 사용하고 있기 때문에 작동할 때까지 Ctrl+F5를 스팸으로 보내달라고 요청할 수 없다는 것입니다.
누구든지 어떤 아이디어가 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.
감사해요.