对于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/
。有什么想法我做错了吗?
答案 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;
}