输入特定 URL 路径时,Nginx 404 Not Found

输入特定 URL 路径时,Nginx 404 Not Found

我正在尝试做的是准备这台机器来为我的 Web 应用程序提供服务。当我通过 提供服务时,它没有任何问题npm start。我有一个域,example.com我在该域上安装了带有 Certbot 的 SSL,并已成功将 http 重新路由到 httpswww.example.com和 example.com。

现在发生的事情是当我去www.example.com或 example.com 工作正常,并且我可以移动到我想要的任何 url 路径,只要它可以从主页上的任何按钮直接访问,但每当我尝试访问单个 url 路径时,比如说 myexample.com/admin/login(它在主页中隐藏)或任何手动输入的 url 路径,Web 服务器都会返回错误 404。当我对 执行相同操作时不会发生这种情况npm start

我正在运行一台安装了以下组件的 EC2 机器:

  • 操作系统:Ubuntu 20.04 LTS
  • Web服务器:Nginx 1.18
  • 节点:10.24.1
  • 新版本:6.14.12
  • SSL 提供商:Let'sEncrypt(Certbot 0.40.0)

我已从 EC2 管理控制台打开以下端口:

  • 80/自定义任意位置 (http)
  • 443/自定义任意位置 (https)
  • 22/自定义我的 IP (ssh)
  • 3000/自定义我的IP(npm启动默认端口)

我还为我的计算机分配了一个弹性 IP,假设它是1.1.1.1

我的 Nginx 配置文件位于: /etc/nginx/sites-enabled 并且名为:client-config

我已经将 Nginx 客户端配置设置为如下所示:

server {
    server_name 1.1.1.1 example.com www.example.com; # 1.1.1.1 this is an example ip
    root /home/ubuntu/app-deploy/build;
    index index.html; # react by default generate the file in the build directory
    location / {
        try_files $uri $uri/ =404;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.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 = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


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


    listen 80;
    server_name 1.1.1.1 example.com www.example.com; # 1.1.1.1 this is an example ip
    return 404; # managed by Certbot




}

跑步nginx -t回报:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

由于我是新手,因此任何帮助都将不胜感激。

答案1

告诉try_files $uri $uri/ =404nginx 在文件系统上查找物理文件。

您需要将请求路由到您的 Node.JS 应用程序。一种方法如下:

location / {
    try_files $uri $uri/ @application;
}

location @application {
    proxy_pass http://127.0.0.1:3000;
}

此配置告诉 nginx 首先搜索物理文件,如果没有找到文件,则请求将传递给你的 NPM 服务器。

相关内容