sveltekit静态适配器nginx部署配置

eanckbw9  于 2022-11-21  发布在  Nginx
关注(0)|答案(1)|浏览(427)

我有一个go api,它也提供静态文件和一个单独的svelte-kit静态站点,我用nginx提供。
有一个问题的配置与try_files我假设。与try_files行#1,网站工作得很好,但我不能查看静态文件,因为没有被重定向到去API,这是服务于这些...
try_files #2修复了静态文件,但问题是,在我硬刷新页面后,很少有页面被破坏,我以nginx 403或404错误结束。
我不能让静态文件和页面在刷新后正常工作。我尝试了一些类似于#3的例子,但它是一样的...基本上我想访问那些静态文件在mysite.co/public/images.logo.png的例子。我需要一个单独的nginx块,我不能弄清楚。

nginx配置文件

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;
        }
}

配置文件

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))))
ncgqoxb0

ncgqoxb01#

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

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

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

相关问题