
用户请求域名->服务器 nginx->前端 docker 服务
FROM node:lts-alpine AS builder # install simple http server for serving static content RUN npm install -g http-server # make the 'app' folder the current working directory WORKDIR /app # copy both 'package.json' and 'package-lock.json' (if available) COPY package*.json ./ # install project dependencies RUN npm install # copy project files and folders to the current working directory (i.e. 'app' folder) COPY . . # build app for production with minification RUN npm run build # build the nginx image FROM nginx:1.17 COPY --from=builder /app/dist /usr/share/nginx/html COPY ./nginx.conf /etc/nginx/conf.d/ EOF 2.docker nginx 配置 nginx.conf
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|txt){ root /usr/share/nginx/html; } location / { try_files $uri $uri/ @router; index index.html; } location @router { rewrite ^.*$ /index.html last; } } 现在是这样的配置
location /api/ { rewrite ^.+api/?(.*)$ /$1 break; # 去除本地接口 /api 前缀, 否则会出现 404 proxy_pass http://xxx.xxxx:8081; # 前端代理的后端服务接口 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Server $host; #add_header 'Access-Control-Allow-Origin' '*'; #add_header 'Access-Control-Allow-Credentials' 'true'; } location / { proxy_pass http://127.0.0.1:8080; #前端 docker 访问的路径 # try_files $uri $uri/ /index.html; } 上面这种配置后,访问刷新路由会 404 ,如果加上 try_files $uri $uri/ /index.html; 就会报错
iled to load module script: Expected a Javascript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec. 注:两边 nginx 都有配置
include /etc/nginx/mime.types; default_type application/octet-stream; 求大佬解答
1 dier 2023-04-24 17:27:48 +08:00 可以倒着排查试试,先确认 docker 部署的服务是否能正常访问。如果 docker 部署的前端没问题,就看服务器 nginx 的日志,有可能是这里的两个 location 没区分成功,导致全都走到某一个 location 上了 |
2 julyclyde &nbs;2023-04-25 12:33:01 +08:00 不懂 前端和 docker 有啥关系?前端的程序不是在浏览器里运行的吗? |
3 caicaiwoshishui OP @dier 感谢,已经搞定了,原因是 nginx 容器在 /etc/nginx/conf.d 文件夹默认有一个 default 文件导致的,需要删除这个就行,或者 mount 配置文件 nginx.conf 修改为 default.conf 即可。 结帖!感谢各位 |