ec2 实例上的 Nginx 不提供静态文件

2023-12-23

什么在起作用

我已在 AWS EC2 实例上启动并运行 MERN stack 仪表板。

  • EC2 实例位于EC2...aws.com
  • React 应用程序在端口上提供服务5004.
  • 节点应用程序正在端口上运行5003.

改变了什么

当我在 GoDaddy 设置要转发的域名(带屏蔽)时,问题就开始了
from 一些商业网站 to ec2.....aws.com.

首先,我设置了NGINX反向代理来提供服务/作为我的反应应用程序(前端)和/api作为我的节点应用程序(后端)
(稍后你会在下面找到nginx代码)

http://somebusiness.com/ http://somebusiness.com/工作正常
http://somebusiness.com/api/heartbeat http://somebusiness.com/api/heartbeat

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

<head>
  <title>Somebusiness Dashboard</title>
  <meta name="description" content="">
  <meta name="keywords" content="">
</head>
<frameset rows="100%,*" border="0">
  <frame src="http://ec2-...aws.com/api/heartbeat" frameborder="0" />
</frameset>

</html>

框架中的实际 URL 是按预期工作的 URL:
http://ec2-...aws.com/api/heartbeat http://ec2-...aws.com/api/heartbeat工作正常

I think GoDaddy与此有关,因为在 GoDaddy 上我可以指定此转发的标题、描述和关键字。所以作为后端,我被迫使用http://ec2-...aws.com/api/ http://ec2-...aws.com/api/作为我的后端 URL,目前还可以(这是我的次要问题目前,因为使用域名作为后端也很方便)

主要问题

如果我发送请求至
http://ec2.....aws.com:5003/uploads/avatars/user1.jpg http://ec2.....aws.com:5003/uploads/avatars/user1.jpg
图片已加载确定.

所以如果我发送请求到
http://ec2.....aws.com/api/uploads/avatars/user1.jpg http://ec2.....aws.com/api/uploads/avatars/user1.jpg
图片未加载.

回顾一下:http://ec2-...aws.com/api/ http://ec2-...aws.com/api/对于路由和请求工作正常,但对于服务则不行静态文件。这让我相信我的 nginx 设置是错误的,并且我花了无数个小时尝试各种不同的设置。在这里我展示我留下的地方:

帮助源和代码

因为我正在使用亚马逊Linux 2,我用它的工具来安装nginx1并设置反向代理。 当我在其他 VPS 上使用 NGINX 时,它的结构有点不同(站点启用和站点可用文件夹)。但在这个 nginx 上只有nginx.conf我进行设置的文件。 (我想这没有什么区别,只是想指出这一点)

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  eyeratereviews.com;
        root         /home/ec2-user/somebusiness-web-backend;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        include /etc/nginx/mime.types;

        location / {
            proxy_pass http://127.0.0.1:5004;
            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;
        }

        location /api {
            root /home/ec2-user/somebusiness-web-backend/uploads/avatars;
            default_type application/json;
            proxy_pass http://127.0.0.1:5003;
            # Following is necessary for Websocket support
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

我的node.js项目文件夹结构是这样的
...
控制器/
models/
static/
- 图片/
-- 标志.png
上传/
- 头像/
-- 用户1.jpg
-- 用户2.jpg
——……


您现有的代码不会尝试删除/api在将 URI 传递到上游之前从 URI 的前面开始。添加尾随/到两个location and proxy_pass价值观。例如:

location /api/ {
    proxy_pass http://127.0.0.1:5003/;
    ...
}

See 这个文件 http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass了解详情。


或者,使用rewrite...break改为修改 URI。

例如:

location /api {
    rewrite ^/api(.*)$ $1 break;
    proxy_pass http://127.0.0.1:5003;
    ...
}

See 这个文件 http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite了解详情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ec2 实例上的 Nginx 不提供静态文件 的相关文章

随机推荐

  • Python 读取文件超时

    在Linux中 有一个文件 sys kernel debug tracing trace pipe 顾名思义 是一个管道 因此 假设我想使用 Python 读取其中的前 50 个字节 我运行以下代码 sudo python c f open
  • Keycloak:从内部 docker 容器运行时令牌颁发者无效

    我在配置 keycloak 在我们的服务器上运行时遇到一些问题 在本地它工作得很好 但在我们的测试环境中 登录后 在使用收到的访问令牌的任何调用中 我们得到 无效的令牌颁发者 预期 http keycloak 8080 auth realm
  • makefile 中的 $(eval ) 导致配方在第一个目标错误之前开始

    CFormat define Format File echo Formatting ifneq wildcard 1 echo if1 The default extensions for intermediate files are n
  • import 语句中的解构赋值

    根据这个source https ponyfoo com articles es6 destructuring in depth以及在某个项目中看到过这种用法的模糊记忆 我很好奇是否有人能够执行以下操作 import map series
  • 如何阻止 WordPress 中的可视化编辑器更改代码?

    每次我切换到 WordPress 中的可视化编辑器时 它都会更改我的代码 例如删除 br 我该如何阻止这个 您不能在基础框架中不添加一些插件 但是 如果您想在可视化编辑器端进行简单的中断 请使用 Shift Enter
  • 如何使用 IE10 播放 HTML5 视频

    我希望有人知道如何帮助我在本地 Intranet 上播放 HTML5 视频 我的 Web 服务器 Windows Server 2008 R2 标准 64 位 IIS版本 IIS7 测试用户环境 Windows 7 Enterprise 使
  • 将内联与显式成员约束相结合时出现奇怪的错误

    更新 我添加了一个重现示例 代码如下所示 type Lib static member inline tryMe a a let name a static member name string name type Test struct
  • 使用 @tffunction 的 Tensorflow2 警告

    此示例代码来自 Tensorflow 2 writer tf summary create file writer tmp mylogs tf function tf function def my func step with write
  • 如何禁用对JSP页面的GET请求?

    我正在修复一些旧缺陷 作为一个缺陷的一部分 我需要确保某些请求仅 POST 到 JSP 页面 而不是 GET 请求 该应用程序有一个表单 可以将数据提交到另一个 JSP 页面 我知道它是错误的并且反对 MVC 但修复它已经太晚了 因为它是一
  • 在 R 中使用 igraph 绘制图形:边长与重量成正比

    我需要为加权无向图绘制一个简单的图 其中唯一的边位于单个中心节点和其他一些节点 即星形网络拓扑 之间 所以我只需要我的节点等距 即之间的角度相同 每对连续的节点 围绕中心节点 但是 我的边缘已加权 我希望边缘长度与权重值成比例 有什么方法可
  • Intellij IDEA构建的war文件位于哪里?

    我正在使用 IntelliJ IDEA 每次运行时都会构建和部署 Web 应用程序项目 所有这一切都在 IntelliJ IDEA 中神奇地发生 但是 现在我应该将其手动部署到测试服务器的 wildfly 上 因此我需要一个工件文件 WAR
  • 如何使用 CUDA Thrust 执行策略覆盖 Thrust 的低级设备内存分配器

    我想重写低级CUDA设备内存分配器 实现为thrust system cuda detail malloc 以便它在调用时使用自定义分配器而不是直接调用cudaMalloc 主机 CPU 线程 这可能吗 如果可以的话 是否可以使用Thrus
  • 无法加载 ,因为它不在 Appbase 下

    我创建了一个NUnit http en wikipedia org wiki NUnit项目 Nunit LoginTest nunit 通过在中选择我的测试项目nunit bin目录 现在我尝试加载该项目 但它给了我以下错误 无法加载 由
  • Inno Setup:如何启动 Adob​​e Reader 并显示 PDF

    我尝试在安装结束时启动 Adob e Reader 以显示自述文件 我使用 PDF 因为我需要显示一些图像 我的 inno 安装脚本失败 并显示 无法执行文件 创建进程失败 代码 267 目录名称无效 我已经尝试过使用和不使用 Filena
  • 请解释一下这个Java正则表达式

    我没有编写以下正则表达式 我正在尝试弄清楚它的作用 我知道它必须从政策地图开始 并且政策地图和接下来的内容之间必须至少有一个空格 但我一直在试图弄清楚括号内的内容意味着什么 我知道无论是什么 它都必须在最后 policy map s x21
  • Chromedriver、Selenium - 自动下载

    我正在使用 Selenium 2 43 0 和 Python 2 7 5 在某一时刻 测试单击一个按钮 将表单信息发送到服务器 如果请求成功 服务器会返回 1 成功的消息 2 合并了表单信息的PDF 我不在乎测试 PDF 我的测试只是寻找成
  • linux ami nginx site_enabled 丢失[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们正在尝试在 Amazon Linux AMI 上安装 nginx 来配置 uwsgi 和 django 但与 Ubuntu 不同 et
  • 在 PHP 中运行具有实时输出的进程

    我正在尝试在网页上运行一个进程 该进程将实时返回其输出 例如 如果我运行 ping 进程 它应该在每次返回新行时更新我的 页面 现在 当我使用 exec command output 时 我被迫使用 c 选项并等到进程完成才能看到输出在我的
  • Google Chrome 插件中出现“onLaunched”错误

    我正在关注 google chrome web 应用程序开发http developer chrome com trunk apps first app html http developer chrome com trunk apps f
  • ec2 实例上的 Nginx 不提供静态文件

    什么在起作用 我已在 AWS EC2 实例上启动并运行 MERN stack 仪表板 EC2 实例位于EC2 aws com React 应用程序在端口上提供服务5004 节点应用程序正在端口上运行5003 改变了什么 当我在 GoDadd