当前位置: 首页 > 知识库问答 >
问题:

Nginx返回不正确的内容类型

空翼
2023-03-14

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

豆荚-

这是相关代码,

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。形态:

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;
    }
  }
}

Ingress Prod:(为了简洁起见,仅保留必要的位),

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

我得到的错误是,

未捕获的语法错误:意外令牌

未捕获的语法错误:意外令牌

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

编辑1:

这是部署后我的文件夹的外观,

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

我的js文件的路径是,

https://

编辑2:

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

本地:

--[2021年4月12日:10:38:18 0000]“GET/HTTP/1.1”200 3213-“Mozilla/5.0(麦金塔;英特尔Mac OS X 11_2_3)AppleWebKit/537.36(KHTML,像Gecko)Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75”

--[12/Apr/2021:10:38:18 0000]"GET /css/milestone.1c126aff.cssHTTP/1.1"200 1139"超文本传输协议:///" "Mozilla/5.0(Macintosh; Intel Mac OS X11_2_3)AppleWebKit/537.36(KHTML, like Gecko)Chrome/

--[12/Apr/2021:10:38:18 0000]"GET /css/catalogue.5794c500.cssHTTP/1.1"200 156"超文本传输协议:///" "Mozilla/5.0(Macintosh; Intel Mac OS X11_2_3)AppleWebKit/537.36(KHTML, like Gecko)Chrome/

部署:

--[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, like Gecko)Chrome/89.0.4389.90Safari/537.36 Edg/89.0.774.54”

--[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, like Gecko)Chrome/89.0.4389.90Safari/537.36 Edg/89.0.774.54”

--[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, like Gecko)Chrome/89.0.4389.90Safari/537.36 Edg/89.0.774.54”

--[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, like Gecko)Chrome/89.0.4389.90Safari/537.36 Edg/89.0.774.54”

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

如您所见,我的本地安装日志显示对特定文件的请求-GET/


共有1个答案

杨乐
2023-03-14

TL; DR

删除/修改以下注释从入口Prod

  • nginx。进入。库伯内特斯。io/重写目标:/$2

您正在使用的批注(重写目标:/$2)的目标捕获组不存在。

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

要解决此问题,您可以:

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

您可以阅读更多关于重写,捕获组和如何nginx-ingress处理它们通过以下留档:

  • 库伯内特斯。github。io:Ingress nginx:示例:重写

我使用了您的确切的入口清单,略有调整,偶然发现了与您描述的相同的问题:

  • curl IP

要显示到达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"

额外资源:

  • 库伯内特斯。io:Docs:概念:服务网络:入口
 类似资料:
  • nginx解决跨域,前端请求后返回的不是想要的内容? 正常返回应该是: 而实际返回确实:

  • 问题内容: def size_of_dir(dirname): print(“Size of directory: “) print(os.path.getsize(dirname)) 是有问题的代码。dirname是一个目录,其中包含 130个 文件,每个文件约 1kb 。当我调用此函数时,它返回 4624 ,这 不是 目录的大小…为什么? 问题答案: 此值(4624B)代表的大小 文件 是 描

  • 我试图检测传递给web服务到SOAP信封中的文件内容类型。可以通过两种方式指示该文件: 从其url, 从其包含(base64压缩数据)。 那么,如何在文件扩展名未知的情况下检测MIME类型呢?

  • line.FlatMap(WordSutil::GetWords)是方法引用中错误的返回类型: 编码方法:

  • 当我尝试向某个endpoint发送sparql查询时,例如: 我明白了 这不是唯一一个我无法向其发送查询的endpoint, 我应该怎么做才能在其他内容类型中获得结果?我试着用谷歌搜索它,但我发现如果我将查询发送到错误的html(不是sparqlendpoint),就会发生这种情况,但是http://data.open.ac.uk/sparql是一个好的endpoint,我通过python向它发送

  • 我正在使用postgis计算两个地理坐标之间的距离。 它返回给我53536.743496517米,大约等于54公里,但实际距离是103公里,我通过http://boulter.com/gps/distance/ 我在询问中是否做错了什么?