server { listen 80; root /usr/share/nginx/html; # Nginx's bundled mime.types does not name the APK type on every build, and # a wrong Content-Type is enough for a download manager to save an HTML # error page under the right filename. Say it explicitly. types { application/json json; application/vnd.android.package-archive apk; } default_type application/octet-stream; # The manifest changes every release; the APKs never do, because a new # release is a new filename. Cache accordingly. location = /manifest.json { add_header Cache-Control "no-cache"; } location ~ \.apk$ { add_header Cache-Control "public, max-age=31536000, immutable"; } # Nothing here is a secret, but nothing here is a directory listing either. autoindex off; location / { try_files $uri =404; } }