我有一个根目录/var/www/html/
在上面的根目录我有多个项目示例project1
project2
我想在nginx配置的单个文件中托管两个NextJ应用程序。
下面是我的nginx配置文件
location / {
root /var/www/html/project1/;
proxy_pass http://localhost:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_hide_header Cache-Control;
add_header Cache-Control "no-cache, no-store";
}
location /_next/static/ {
alias /var/www/html/project1/.next/static/;
expires 365d;
access_log off;
}
location /blog/ {
rewrite /blog/(.*) /$1 break;
proxy_cache my_cache;
root /var/www/html/project2/;
proxy_pass http://localhost:3003/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_hide_header Cache-Control;
add_header Cache-Control "no-cache, no-store";
}
location /blog/_next/static/ {
alias /var/www/html/project2/.next/static/;
expires 365d;
access_log off;
}
当我在生产服务器上运行项目2,即mydomain.com/blog
时,chunk是从root而不是从blog提供服务的,例如:
mydomain.com/_next/static/chunks/4574.41d99ce27dfde7f6.js
预期结果-mydomain.com/blog/_next/static/chunks/4574.41d99ce27dfde7f6.js
**Edit-**我们也可以使用next.js.js。我的代码
const blogAppRewrites = [
{
source: "/",
destination: "/blog",
},
];
module.exports = {
async rewrites() {
return blogAppRewrites;
},
};
3条答案
按热度按时间iih3973s1#
这可能是因为您为第二个应用程序设置别名和proxy_pass的方式。在/blog/_next/static/ location中,使用别名directiv。但是对于/blog/位置,您使用的是root指令。我认为这可能是导致服务器在错误的位置查找文件,导致不正确的URL。您可以在/blog/位置中使用try_files指令,以允许Nginx从预期位置提供静态文件,并将剩余的请求路由到相应的代理。尝试这样的事情,
5lhxktic2#
试试这个
这里的关键变化是位置/博客/块。重写规则已经修改,在将URI传递给上游服务器之前,从URI中删除了/blog/前缀。这确保了URL被第二个Next.js应用程序正确处理,并且块将从预期的/blog/_next/static/目录中提供。
在进行此更改之后,您的NGINX配置应该为两个Next.js应用程序提供正确子目录中的块。
0tdrvxhp3#
您是否尝试过将基本路径添加到第二个项目中-这样它就知道它是从服务器获得的,并从服务器请求文件?
所以我觉得你应该试着
在您的项目2的
next.config.js
中。就像这里描述的:https://nextjs.org/docs/pages/api-reference/next-config-js/basePath