我有两个docker镜像,一个是为我的reaction应用程序构建的文件提供服务的a nginx,另一个是后端Express服务器,两者都在同一台机器上运行.我现在的问题是,我的前端应用程序使用Reaction路由来创建作为房间的前端路由.当我第一次通过Reaction-Routing useHistory
API访问该路由时,它按预期工作.但我刷新后,我在ngix上找不到404.
这是我的nginx.conf文件.据我所知,当一个请求进入时,nginx会查找最长的匹配路径,在我的例子中,路由大约是HqHvNw
.因此,nginx找到location /
作为匹配的路由.并且因为它没有找到目录HqHvNw
,所以它后退,并提供文件index.html' in
/usr/share/nginx/html`.但目前,它没有像我预期的那样工作,它返回了404 Not Found.
http {
server {
listen 80;
root /usr/share/nginx/html;
location / {
try_files $uri $uri/ /index.html;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
}
}
}
}
我得到的日志(log)是这样的,为什么它不支持index.html
文件?
2023/04/02 19:50:35 [error] 9#9: *1 open() "/usr/share/nginx/html/HqHvNw" failed (2: No such file or directory), client: xx.xxx.xx.xx, server: , request: "GET /HqHvNw HTTP/1.1", host: "yy.yy.y.yy"
我试过的东西:
- 我已经将
docker exec
放入容器中,以确保所需的文件位于目录中. - 我甚至对整个html目录进行了
chmod -R 777
次判断,以确保不存在任何权限问题.
如果我误解了什么,请纠正我,任何建议也将不胜感激!谢谢!
编辑:这是我的前端dockerfile
FROM node:alpine as builder
WORKDIR /client
COPY package.json ./
COPY package-lock.json ./
COPY ./ ./
RUN npm install --force
RUN npm run build
FROM nginx:alpine
COPY ./.nginx/nginx.conf /etc/nginx/nginx.conf
## Remove default nginx index page
RUN rm -rf /usr/share/nginx/html/*
# Copy from the stage 1
COPY --from=builder /client/build /usr/share/nginx/html
RUN ls -la /usr/share/nginx/html
ENTRYPOINT ["nginx", "-g", "daemon off;"]