sveltekit静态适配器nginx部署配置



我有一个go-api,它也提供静态文件和一个单独的svelte-kit静态站点,我正在与nginx一起服务。

我认为try_files的配置有问题。有了try_files第1行,站点运行得很好,但我无法查看静态文件,因为没有任何东西被重定向到为这些文件服务的goapi。。。

try_files#2修复了静态文件,但问题是在我硬刷新页面后,很少有页面被破坏,我最终会出现nginx403或404错误。

刷新后,我无法使静态文件和页面正常工作。我试过类似的第三个例子,但它是一样的。。。例如,基本上我想访问mysite.co/public/images.logo.png上的那些静态文件。我需要一个单独的nginx块吗,我想不通。

nginx conf

upstream backend {
server 127.0.0.1:3001;
}
server {
server_name mysite.co www.mysite.co;
location / {
root /var/www/mysite.co;
index index.html;
#1 try_files $uri $uri/ /index.html;
#2 try_files $uri $uri/ @go-api;
#3 try_files $uri $uri.html /index.html @go-api;
}
location @go-api {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header x-forwarded-proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
location /api/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header x-forwarded-proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
}

svelt.config.js

import adapter from '@sveltejs/adapter-static';
import preprocess from 'svelte-preprocess';
const config = {
preprocess: preprocess(),
kit: {
adapter: adapter({
pages: 'build',
assets: 'build',
fallback: 'index.html',
precompress: false,
}),
prerender: {
default: true,
},
},
};
export default config;

我用这个代码在/public上提供静态文件(使用chi路由器(

subFS, err := fs.Sub(a.PublicFS(), "public")
if err != nil {
panic("failed to serve static files: " + err.Error())
}
r.Handle("/public/*", http.StripPrefix("/public/", http.FileServer(http.FS(subFS))))

如果所有静态文件都可以在mysite.co/public路径上使用,请将此块添加到您的配置中:

location /public/ {
include proxy_params;
try_files $uri $uri/ @go.api;
}

它将把包含public子字符串的路径的流量重定向到go api,而不是在svelte静态站点上搜索这些文件

最新更新