亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

由于 Nginx 的優(yōu)秀性能表現(xiàn),所以很多企業(yè)在 Kubernetes 中選擇 Ingress Controller 的時(shí)候依然會(huì)選擇基于 nginx 的 ingress-nginx,前面文章中我們更多的是介紹更加云原生配置更加靈活的 Traefik,特別是 Traefik 2.0 版本新增中間件概念以后,在配置上就更加方便了,各種需求都可以通過中間件來實(shí)現(xiàn),對(duì)于 ingress-nginx 來說配置就稍微麻煩一點(diǎn),一些復(fù)雜的需求需要通過 Ingress 的 annotation 來實(shí)現(xiàn),比如我們現(xiàn)在需要實(shí)現(xiàn)一個(gè) url rewrite 的功能,簡(jiǎn)單來說就是我們之前的應(yīng)用在 todo.qikqiak.com 下面,現(xiàn)在我們需要通過 todo.qikqiak.com/App/ 來進(jìn)行訪問。

本次測(cè)試使用的集群為 Kubernetes v1.16.2,ingess-nginx 鏡像版本為 0.26.1

最原始的 Ingress 對(duì)象如下所示:

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: fe  namespace: default  annotations:    kubernetes.io/ingress.class: "nginx"spec:  rules:  - host: todo.qikqiak.com    http:      paths:      - backend:          serviceName: fe          servicePort: 3000        path: /

就是一個(gè)很常規(guī)的 Ingress 對(duì)象,部署該對(duì)象后,將域名解析后就可以正常訪問到應(yīng)用:

ingress-nginx 中 Rewrite 的使用

ingress nginx demo

按照需求我們需要對(duì)訪問的 URL 路徑做一個(gè) Rewrite,在 ingress-nginx 官方文檔中也給出了說明:

ingress-nginx 中 Rewrite 的使用

ingress nginx rewrite

按照要求我們需要在 path 中匹配前綴 app,然后通過 rewrite-target 指定目標(biāo),修改后的 Ingress 對(duì)象如下所示:

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: fe  namespace: default  annotations:    kubernetes.io/ingress.class: "nginx"    nginx.ingress.kubernetes.io/rewrite-target: /$2spec:  rules:  - host: todo.qikqiak.com    http:      paths:      - backend:          serviceName: fe          servicePort: 3000        path: /app(/|$)(.*)

更新后,我們可以遇見到直接訪問域名肯定是不行了,因?yàn)槲覀儧]有匹配 / 的 path 路徑:

ingress-nginx 中 Rewrite 的使用

ingress nginx rewrite 404

但是我們帶上 app 的前綴再去訪問:

ingress-nginx 中 Rewrite 的使用

ingress nginx rewrite 1

我們可以看到已經(jīng)可以訪問到頁面內(nèi)容了,這是因?yàn)槲覀冊(cè)?path 中通過正則表達(dá)式 /app(/|$)(.*) 將匹配的路徑設(shè)置成了 rewrite-target 的目標(biāo)路徑了,所以我們?cè)L問 todo.qikqiak.com/app 的時(shí)候?qū)嶋H上相當(dāng)于訪問的就是后端服務(wù)的 / 路徑,但是我們也可以發(fā)現(xiàn)現(xiàn)在頁面的樣式?jīng)]有了:

ingress-nginx 中 Rewrite 的使用

ingress nginx rewrite 2

這是因?yàn)閼?yīng)用的靜態(tài)資源路徑是在 /stylesheets 路徑下面的,現(xiàn)在我們做了 url rewrite 過后,要正常訪問也需要帶上前綴才可以:http://todo.qikqiak.com/stylesheets/screen.css,對(duì)于圖片或者其他靜態(tài)資源也是如此,當(dāng)然我們?nèi)ジ捻撁嬉腱o態(tài)資源的方式為相對(duì)路徑也是可以的,但是畢竟要修改代碼,這個(gè)時(shí)候我們可以借助 ingress-nginx 中的 configuration-snippet 來對(duì)靜態(tài)資源做一次跳轉(zhuǎn),如下所示:

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: fe  namespace: default  annotations:    kubernetes.io/ingress.class: "nginx"    nginx.ingress.kubernetes.io/rewrite-target: /$2    nginx.ingress.kubernetes.io/configuration-snippet: |      rewrite ^/stylesheets/(.*)$ /app/stylesheets/$1 redirect;  # 添加 /app 前綴      rewrite ^/images/(.*)$ /app/images/$1 redirect;  # 添加 /app 前綴spec:  rules:  - host: todo.qikqiak.com    http:      paths:      - backend:          serviceName: fe          servicePort: 3000        path: /app(/|$)(.*)

更新 Ingress 對(duì)象后,這個(gè)時(shí)候我們刷新頁面可以看到已經(jīng)正常了:

ingress-nginx 中 Rewrite 的使用

ingress nginx rewrite 3

要解決我們?cè)L問主域名出現(xiàn) 404 的問題,我們可以給應(yīng)用設(shè)置一個(gè) app-root 的注解,這樣當(dāng)我們?cè)L問主域名的時(shí)候會(huì)自動(dòng)跳轉(zhuǎn)到我們指定的 app-root 目錄下面,如下所示:

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: fe  namespace: default  annotations:    kubernetes.io/ingress.class: "nginx"    nginx.ingress.kubernetes.io/app-root: /app/    nginx.ingress.kubernetes.io/rewrite-target: /$2    nginx.ingress.kubernetes.io/configuration-snippet: |      rewrite ^/stylesheets/(.*)$ /app/stylesheets/$1 redirect;  # 添加 /app 前綴      rewrite ^/images/(.*)$ /app/images/$1 redirect;  # 添加 /app 前綴spec:  rules:  - host: todo.qikqiak.com    http:      paths:      - backend:          serviceName: fe          servicePort: 3000        path: /app(/|$)(.*)

這個(gè)時(shí)候我們更新應(yīng)用后訪問主域名 http://todo.qikqiak.com 就會(huì)自動(dòng)跳轉(zhuǎn)到 http://todo.qikqiak.com/app/ 路徑下面去了。但是還有一個(gè)問題是我們的 path 路徑其實(shí)也匹配了 /app 這樣的路徑,可能我們更加希望我們的應(yīng)用在最后添加一個(gè) / 這樣的 slash,同樣我們可以通過 configuration-snippet 配置來完成,如下 Ingress 對(duì)象:

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: fe  namespace: default  annotations:    kubernetes.io/ingress.class: "nginx"    nginx.ingress.kubernetes.io/app-root: /app/    nginx.ingress.kubernetes.io/rewrite-target: /$2    nginx.ingress.kubernetes.io/configuration-snippet: |      rewrite ^(/app)$ $1/ redirect;      rewrite ^/stylesheets/(.*)$ /app/stylesheets/$1 redirect;      rewrite ^/images/(.*)$ /app/images/$1 redirect;spec:  rules:  - host: todo.qikqiak.com    http:      paths:      - backend:          serviceName: fe          servicePort: 3000        path: /app(/|$)(.*)

更新后我們的應(yīng)用就都會(huì)以 / 這樣的 slash 結(jié)尾了。這樣就完成了我們的需求,如果你原本對(duì) nginx 的配置就非常熟悉的話應(yīng)該可以很快就能理解這種配置方式了,當(dāng)然如果你還是喜歡更加簡(jiǎn)單明了的方式的話可以推薦使用 Traefik 。

分享到:
標(biāo)簽:Rewrite
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定