Nginx返回不正确的内容类型



我有一个Vue.js应用程序,我的部署设置非常标准,

Pod->服务->入口

这是相关的代码,

Dockerfile

FROM node:lts-alpine AS build
WORKDIR /app
COPY . .
# Default build mode
ARG MODE=production
# Build the dist folder
RUN npm ci
RUN npm run build ${MODE}
# Serve from nginx
FROM nginx:alpine
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY --from=build /app/dist /usr/share/nginx/html

Nginx.conf

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
worker_connections  1024;
}
http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log  /var/log/nginx/access.log  main;
sendfile        on;
keepalive_timeout  65;
server {
listen       8080;
location / {
root   /usr/share/nginx/html;
index  index.html;
try_files $uri $uri/ /index.html;
}
}
}

入口产品:(为了简洁起见,只保留必要的位(,

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/ssl-redirect: "true"
labels:
app: <my-app>
app.kubernetes.io/instance: <my-instance>
name: <my-name>
namespace: <my-namespace>
spec:
rules:
- host: <my-host>
http:
paths:
- backend:
serviceName: livspace-hub
servicePort: 80
path: /

进入本地

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: <my-app-name>
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: <my-host>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hub-service
port:
number: 9090

我得到的错误是,

未捕获的语法错误:意外的标记'<'区块供应商.a727ce10.js:1

未捕获的语法错误:意外的标记"<"app.a68a0468.js:1

网络选项卡中这两个资源的内容类型都是text/html

编辑1:

这就是我的文件夹在部署后的样子,

/usr/share/nginx/html # ls
50x.html assets css  favicon.ico fonts index.html  js  styles

我的js文件的路径是,

https://<my-domain>/js/app.a68a0468.js

编辑2:

以下是我的本地应用程序与已部署应用程序的日志。

本地

-〔12/Apr/2021:10:38:18+0000〕";GET/HTTP/1.1";200 3213"-"quot;Mozilla/5.0(Macintosh;Intel Mac OS X 11_2_3(AppleWebKit/537.36(KHTML,类似Gecko(Chrome/89.04389.114 Safari/537.36 Edg/89.0.774.75";

-[2022年4月12日10:38:18+0000]";获取/css/milestone.1c126aff.css HTTP/1.1";200 1139";http:///"Mozilla/5.0(Macintosh;Intel Mac OS X 11_2_3(AppleWebKit/537.36(KHTML,类似Gecko(Chrome/89.04389.114 Safari/537.36 Edg/89.0.774.75";

-[2022年4月12日10:38:18+0000]";GET/css/cataloge.5794c500.css HTTP/1.1";200 156〃;http:///"Mozilla/5.0(Macintosh;Intel Mac OS X 11_2_3(AppleWebKit/537.36(KHTML,类似Gecko(Chrome/89.04389.114 Safari/537.36 Edg/89.0.774.75";

已部署:

-[12/Apr/2021:12:46:28+0000]";GET/HTTP/1.1";200 3213";https://"Mozilla/5.0(Windows NT 10.0;Win64;x64(AppleWebKit/537.36(KHTML,类似Gecko(Chrome/89.0438.90 Safari/537.36 Edg/89.0.774.54";

-[2022年4月12日1:12:46:28+0000]";GET/HTTP/1.1";200 3213";https://"Mozilla/5.0(Windows NT 10.0;Win64;x64(AppleWebKit/537.36(KHTML,类似Gecko(Chrome/89.0438.90 Safari/537.36 Edg/89.0.774.54";

-[2022年4月12日1:12:46:28+0000]";GET/HTTP/1.1";200 3213";https://"Mozilla/5.0(Windows NT 10.0;Win64;x64(AppleWebKit/537.36(KHTML,类似Gecko(Chrome/89.0438.90 Safari/537.36 Edg/89.0.774.54";

-[2022年4月12日1:12:46:28+0000]";GET/HTTP/1.1";200 3213";https://"Mozilla/5.0(Windows NT 10.0;Win64;x64(AppleWebKit/537.36(KHTML,类似Gecko(Chrome/89.0438.90 Safari/537.36 Edg/89.0.774.54";

我的本地实例也通过docker/docker-compose运行,因此设置基本相同。

正如您所看到的,我的本地设置日志显示对特定文件(GET /<filename>(的请求,而部署的实例只显示GET /的日志。

TL;DR

Ingress Prod中删除/修改以下注释:

  • nginx.ingress.kubernetes.io/rewrite-target: /$2

说明:

您正在使用的注释(rewrite-target: /$2(针对的是不存在的捕获组。

通过Ingress资源发送到应用程序的每个请求都将被重写为/

要修复此问题,您可以:

  • 完全删除此注释
  • 修改支持重写的注释,例如:/

您可以通过以下文档阅读有关重写、捕获组以及nginx-ingress如何处理它们的更多信息:

  • Kubernets.github.io:Ingress nginx:示例:重写

示例:

我使用了你的Ingress清单,稍作调整,偶然发现了与你描述的相同的问题:

  • curl IP
  • curl IP/hello.html

为了显示到达Pod的请求,我使用了nginxPod作为后端:

/docker-entrypoint.sh: Configuration complete; ready for start up
10.88.0.20 - - [13/Apr/2021:15:01:37 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.1" "SOURCE_IP_OF_MINE"
10.88.0.20 - - [13/Apr/2021:15:01:40 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.1" "SOURCE_IP_OF_MINE"

其他资源:

  • Kubernetes.io:文档:概念:服务网络:入口

最新更新