Node.js Docker compose Nginx访问静态文件404错误
我正在使用Node.js Docker compose Nginx访问静态文件404错误,node.js,docker,nginx,docker-compose,Node.js,Docker,Nginx,Docker Compose,我正在使用docker compose部署Nodejs(KeystoneJS)应用程序。 我想通过如下url访问静态png: 现在我得到了404错误 共有3个容器,Nginx、app、mongo 文件夹结构 # https://docs.docker.com/samples/library/node/ ARG NODE_VERSION=12.10.0 # https://github.com/Yelp/dumb-init/releases ARG DUMB_INIT_VERSION=1.2.2
docker compose
部署Nodejs(KeystoneJS)应用程序。
我想通过如下url访问静态png:
现在我得到了404错误
共有3个容器,Nginx、app、mongo
文件夹结构
# https://docs.docker.com/samples/library/node/
ARG NODE_VERSION=12.10.0
# https://github.com/Yelp/dumb-init/releases
ARG DUMB_INIT_VERSION=1.2.2
# Build container
FROM node:${NODE_VERSION}-alpine AS build
ARG DUMB_INIT_VERSION
WORKDIR /home/node
RUN apk add --no-cache build-base python2 yarn && \
wget -O dumb-init -q https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_amd64 && \
chmod +x dumb-init
ADD . /home/node
RUN yarn install && yarn build && yarn cache clean
# Runtime container
FROM node:${NODE_VERSION}-alpine
WORKDIR /home/node
COPY --from=build /home/node /home/node
EXPOSE 3000
CMD ["./dumb-init", "yarn", "start"]
- 阿普克斯
- myapp
- 温顺的
- docker-compose.yml
- 图像位于apks下的
- 将Nginx配置文件中的Set static alias设置为docker应用程序容器文件夹:
/home/node/static/apks/
upstream my_app {
server 192.168.1.119:3000;
}
server {
listen *:80;
listen [::]:80;
listen 443 ssl;
ssl_certificate /etc/nginx/certs/server-cert.pem;
ssl_certificate_key /etc/nginx/certs/server-key.pem;
location / {
proxy_set_header Host $http_host;
proxy_pass http://my_app;
}
location /uploads/apks/ {
alias /home/node/static/apks/;
types {
image/png png;
image/jpeg jpg;
}
}
}
- 当请求进入时,Nginx指向
,并且由于此卷已装载到操作系统/home/node/static/apks/
中的实际路径,因此应该响应那里的映像/apks
version: '3'
services:
nginx:
image: nginx
restart: always
volumes:
- ../apks:/home/node/static/apks
- /xxx/certs:/etc/nginx/certs
- /xxx/nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
- "443:443"
links:
- app
app:
container_name: my-app
image: my-app
restart: always
build: .
volumes:
- ../apks:/home/node/static/apks
ports:
- "3000:3000"
links:
- mongo
mongo:
image: mongo:latest
restart: always
ports:
- "27017:27017"
Dockfile
# https://docs.docker.com/samples/library/node/
ARG NODE_VERSION=12.10.0
# https://github.com/Yelp/dumb-init/releases
ARG DUMB_INIT_VERSION=1.2.2
# Build container
FROM node:${NODE_VERSION}-alpine AS build
ARG DUMB_INIT_VERSION
WORKDIR /home/node
RUN apk add --no-cache build-base python2 yarn && \
wget -O dumb-init -q https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_amd64 && \
chmod +x dumb-init
ADD . /home/node
RUN yarn install && yarn build && yarn cache clean
# Runtime container
FROM node:${NODE_VERSION}-alpine
WORKDIR /home/node
COPY --from=build /home/node /home/node
EXPOSE 3000
CMD ["./dumb-init", "yarn", "start"]
以下是错误日志:
{"level":30,"time":1578817809651,"pid":35,"hostname":"5bb05c547cb6","req":{"id":3,"method":"GET","url":"/uploads/apks/5e1ac55962c6a800230d67fb-Screenshot%202019-12-21%20at%201.01.18%20AM.png","headers":{"host":"localhost:3000","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","upgrade-insecure-requests":"1","cookie":"keystone.sid=s%3Abg7rFgPthjLPes_UWkW2KLI5_HJUVTPN.5shrIzmAUa7zxiq5r5eMhr4N%2BcGlwicwA5Bbim4iV7s","user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15","accept-language":"en-sg","accept-encoding":"gzip, deflate","connection":"keep-alive"},"remoteAddress":"::ffff:172.20.0.1","remotePort":43074},"res":{"statusCode":404,"headers":{"x-powered-by":"Express","x-keystone-app-version":"1.0.0","vary":"Origin, Accept-Encoding","access-control-allow-credentials":"true","content-security-policy":"default-src 'none'","x-content-type-options":"nosniff","content-type":"text/html; charset=utf-8","content-length":224}},"responseTime":2,"msg":"request completed","v":1}
谢谢你的帮助 通过更改我的静态文件夹的权限,最终解决了这个问题
sudo chmod-R 755~/apks
通过更改我的静态文件文件夹的权限最终解决了这个问题
sudo chmod-R 755~/apks
显然,请求是通过代理传递的,未由Nginx处理。您需要改进nginx位置配置。@JanGaraj您能更具体一点吗?“不由Nginx处理”是什么意思?我一点也不知道,谢谢!显然,请求是通过代理传递的,而不是由Nginx处理。您需要改进nginx位置配置。@JanGaraj您能更具体一点吗?“不由Nginx处理”是什么意思?我一点也不知道,谢谢!