部署网站上出现 NextJS 500 内部服务器错误。但在本地构建效果非常好

问题描述 投票:0回答:2

Build 在我的本地 PC 上使用 pm2 完美运行,没有任何错误。每个页面加载都很完美,获取文件时没有 404 或 500 错误。这很棒!这正是我想要的运行方式。

但是当我尝试使用 pm2 在 Ubuntu 上部署它时,我遇到了两组错误:

我将把截图放在这里:

https://i.stack.imgur.com/3XybJ.png

书面形式:

 Script_app-a44cfb7405f734c3.js

 Script_buildManifest.js

 Script_ssgManifest.js

 Script_middlewareManifest.js

(和其他人)无论我做什么,都会给我一个 500 内部服务器错误。

尝试的解决方案


我尝试了很多方法,当我导航到我部署的网站时,所有方法都以此错误/失败结束。

  • 使用 filezilla 手动上传。

  • 从我的存储库中进行 Git 克隆,在服务器上构建(没有构建错误),然后使用 pm2 进行部署。 pm2 也没有错误!但后来我收到了 404/500 错误。

我已经在不同的文件夹中尝试过这个,我已经使用许多不同的命令进行了尝试。我完全没有想法,我已经上传并尝试将我的文件放在那里并安装软件包等等。

Nginx 错误?


这可能是 nginx 错误?但是 nginx 设置对于全新的“npx create-next-app@latest”来说工作得非常好,严格按照这个教程:https://www.youtube.com/watch?v=x6ci2iCckWc&t=658s&ab_channel=DigitalCEO

我的 nginx 文件

"server {
        server_name specialservername.com;

        gzip on;
        gzip_proxied any;
        gzip_types application/javascript application/x-javascript text/css text/javascript;
        gzip_comp_level 5;
        gzip_buffers 16 8k;
        gzip_min_length 256;

        location /_next/static/ {
                alias /var/www/frontend/.next/static/;
                expires 365d;
                access_log off;
        }

#EDITS
   location ~ ^/_next/static/(.*)$ {
      root /.next;
      try_files "/static/$1" "/server/static/o$1" @proxy_pass;
   }


#END EDITS


        location / {
                proxy_pass http://127.0.0.1:3000; #change to 3001 for second app, but make sure second nextjs app starts on new port in packages.json "start": "next start -p 3001",
                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;
                add_header Access-Control-Allow-Origin *;
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/specialservername.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/specialservername.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}

server {
    if ($host =specialservername.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        server_name specialservername.com;
    return 404; # managed by Certbot


}"

我所期待的


要部署在该服务器上的 NextJS 版本与我的本地计算机上的版本没有什么不同。在我的本地机器上它很漂亮!

reactjs nginx next.js nginx-reverse-proxy nginx-config
2个回答
3
投票

如果您在尝试使用 nginx 访问 Ubuntu 上的 Next.js 应用程序时看到“内部服务器错误”,则可能是您的配置存在问题。

您可以尝试以下一些方法:

检查您的 nginx 错误日志:查看您的 nginx 错误日志(通常位于 /var/log/nginx/error.log 中)是否有任何可能表明问题原因的错误消息。

检查 Next.js 日志:您还应该检查 Next.js 日志(通常位于应用程序的 .next 目录中)是否有任何可能表明问题原因的错误消息。

检查您的 Next.js 配置:确保您的 Next.js 配置已正确设置以进行生产部署。您应该确保您的 next.config.js 文件具有生产部署所需的设置,例如设置目标:“服务器”、配置构建选项以及在必要时设置资产前缀。

检查您的环境变量:确保您的应用程序所依赖的任何环境变量在您的 Ubuntu 服务器上设置正确。

检查权限:确保服务器上的文件、构建文件有足够的权限。

另外,如果上面的一切工作正常,请尝试使用 nginx 对您的应用程序进行 docker 化并在本地运行,然后简单地在服务器(ubuntu)上模仿相同的操作,因为这肯定会给您一些线索。

还有......最后,不要惊慌。 😃


0
投票

如果您在组件中访问

window
而不先检查它是否存在,则可能会发生此错误。避免错误的示例:

if (typeof window !== 'undefined') {
    url = window.location.href;
}
© www.soinside.com 2019 - 2024. All rights reserved.