nginx尝试根据uri在目录中查找index.html

时间:2018-07-16 17:26:06

标签: reactjs nginx react-router

对于Nginx,我有一个简单的配置即可服务我的React应用:

server {
    listen 80;
    root /usr/share/nginx/html;

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

我有路线/login。当我通过React-Router从localhost/转到localhost/login时,一切正常。但是,当我在浏览器中输入localhost/login时,出现404错误。

确切地说,对于localhost/login,我在nginx控制台中得到了"/usr/share/nginx/html/login" failed (2: No such file or directory)。 而对于localhost/login/,我得到"/usr/share/nginx/html/login/index.html" is not found (2: No such file or directory)

我不明白为什么Nginx会继续在index.html而不是/usr/share/nginx/html/login/中寻找/usr/share/nginx/html/。有什么想法我做错了吗?

2 个答案:

答案 0 :(得分:2)

好的,我很糟糕,好像我搞砸了配置文件。 在我的Dockerfile中,我做了以下

COPY nginx/default.conf /etc/nginx/conf.default 

很明显,nginx不在conf.default文件中寻找配置。

所以我创建了nginx.conf文件:

events {
    worker_connections  1024;
}

http {
    server {
        listen 80;
        root /usr/share/nginx/html;

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

并写在Dockerfile

COPY nginx/nginx.conf /etc/nginx/nginx.conf

那解决了问题。感谢您的帮助!

答案 1 :(得分:1)

您不需要location

尝试在那里更改配置中的代码

server {
    listen 80;
    root /usr/share/nginx/html;
    index index.html;
    location / {
      try_files /index.html =404;
  }
}

如果您还有其他静态文件,请添加此代码(在location / {}块之后)

location /files/ { 
  autoindex on;
  root /var/www/[your repo name]/files;
}