Javascript 如何修复';无法发布/index.html';在Nginx、Express和NodeJS中

Javascript 如何修复';无法发布/index.html';在Nginx、Express和NodeJS中,javascript,node.js,express,nginx,react-router,Javascript,Node.js,Express,Nginx,React Router,我正在生产服务器上设置我的MERN项目 确保您可以手动键入URL(例如myproject.com/dashboard),我在我的Nginx配置文件try_files$uri/index.html的server部分添加了以下行允许此操作(如react路由器培训所述)。现在,当尝试登录时,无法发布/index.html,这会导致以下响应 如果我删除该行,则所有对api的调用都会工作(我可以再次登录),但我无法手动输入url 我已尝试将try\u files行移动到server部分的顶部,以防服务器部

我正在生产服务器上设置我的MERN项目 确保您可以手动键入URL(例如
myproject.com/dashboard
),我在我的Nginx配置文件
try_files$uri/index.html的
server
部分添加了以下行允许此操作(如react路由器培训所述)。现在,当尝试登录时,
无法发布/index.html
,这会导致以下响应

如果我删除该行,则所有对api的调用都会工作(我可以再次登录),但我无法手动输入url

我已尝试将
try\u files
行移动到
server
部分的顶部,以防服务器部分对此敏感

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name myproject.com;
    root /home/forge/myproject.com/client/build;
    ...
    location / {
        try_files $uri /index.html;
        proxy_pass http://127.0.0.1:8080;
    }
    ...
}

我希望能够登录(调用我的api)并手动输入项目的URL。

我认为您的配置无效。在您的配置中,如果请求的文件不存在,您将发送文件
index.html
。永远不会调用代理

由于您的服务器具有
/api
前缀,请在nginx服务器上进行如下配置。因此,以
/api
开头的请求将成为后端服务器的代理

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name myproject.com;
  root /home/forge/myproject.com/client/build;

  location /api/ {
    proxy_pass http://127.0.0.1:8080;
  }

  location / {
    try_files $uri /index.html;
  }

}

这很有效,谢谢你。你的解释很有道理!
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name myproject.com;
  root /home/forge/myproject.com/client/build;

  location /api/ {
    proxy_pass http://127.0.0.1:8080;
  }

  location / {
    try_files $uri /index.html;
  }

}