Apache HTTP Client
支持,而不是已經不推薦使用的Ribbon RestClient
。RestClient
或okhttp3.0kHttpClient
,請分別設置ribbon.restclient.enabled = true
//或
ribbon.okhttp.enabled = true
複製代碼
若是要自定義Apache HTTP客戶端或OK HTTP客戶端,請提供ClosableHttpClient或OkHttpClient類型的bean。html
配置文件application.yml中設置java
zuul:
routes:
users:
path: /myusers/**
sensitiveHeaders: Cookie,Set-Cookie,Authorization
url: https://downstream
複製代碼
這裏sensitiveHeaders
是默認值,因此當你但願它不一樣時,才需進行設置。 這是Spring Cloud Netflix 1.1
中的新功能(在1.0中,用戶沒法控制標題,而且全部Cookie都在兩個方向上流動)。git
sensitiveHeaders
是黑名單,且默認不爲空。 所以,要使Zuul發送全部標頭(忽略的標頭除外),您必須將其明確設置爲空列表。 若是要將cookie或受權標頭傳遞到後端,則必須這樣作。 如下示例顯示瞭如何使用sensitiveHeaders:github
zuul:
routes:
users:
path: /myusers/**
sensitiveHeaders:
url: https://downstream
複製代碼
您還能夠經過設置sensitiveHeaders
來設置zuul.sensitiveHeaders
。 若是在路由上設置了sensitiveHeaders
,它將覆蓋全局sensitiveHeaders
設置。spring
zuul.ignoreHeaders
屬性可用於丟棄一些標題。zuul.ignoredHeaders = Header1,Header2
; 那麼Header1和Header2將不會傳播到任何其餘服務。zuul.ignoredHeaders=
是空的。但若是Spring Securuty
在classpath中。 它的值在是:Pragma,Cache-Control,X-Frame-Options,X-Content-Type-Options,X-XSS-Protextion,Expires
複製代碼
zuul.ignoreSecurityHeaders
的默認值爲true。可是當我想要標頭值的值時 從下游服務咱們須要設置爲false。後端
route-sensitive
外,您還能夠將與下游服務交互期間應丟棄的值(請求和響應)設置名爲zuul.ignoredHeaders
的全局值。 默認狀況下,若是Spring Security
不在類路徑中,則它們爲空。 不然,它們被初始化爲一組衆所周知的「安全」頭文件(例如,涉及緩存),如Spring Security
所指定的那樣。 在這種狀況下的假設是下游服務也可能添加這些頭,但咱們想從代理中得到這些值。 若是要在Spring Security
位於類路徑時不丟棄這些衆所周知的security headers
,能夠將zuul.ignoreSecurityHeaders
設置爲false
。 若是您在Spring Security
中禁用了HTTP安全響應標頭並但願下游服務提供的值,那麼這樣作會很是有用。Spring Boot Actuator
的依賴,不然訪問/routes 端點將會返回404;management.security.enabled = false
,不然將會返回401;也可添加Spring Security的依賴,這樣可經過帳號、密碼訪問routes 端點。標題: 扼殺模式和本地轉發
緩存
遷移現有應用程序或API時的一種常見模式是「扼殺」舊端點,慢慢用不一樣的實現替換它們。 Zuul代理是一個有用的工具,由於您可使用它來處理來自舊端點的客戶端的全部流量,但將一些請求重定向到新的端點。tomcat
如下示例顯示「strangle」方案的配置詳細信息:安全
zuul:
routes:
first:
path: /first/**
url: http://first.example.com
second:
path: /second/**
# forward的是本地轉發
url: forward:/second
third:
path: /third/**
url: forward:/3rd
legacy:
path: /**
url: http://legacy.example.com
複製代碼
==[注意]== 忽略的模式不會被徹底忽略,它們只是不禁代理處理(所以它們也能夠在本地有效轉發)。bash
標題: 經過zuul上傳文件
@EnableZuulProxy
註解,能夠用代理路徑上傳文件,只要文件很小,它就能夠正常工做。curl -F "file=@d:/tmp.txt" localhost:8050/upload
curl -F "file=@d:/tmp.txt" localhost:8050/microservice-file-upload/upload
複製代碼
/zuul/*
中的Spring DispatcherServlet; 即便用/zuul/*
的方式繞過Spring DispatcherServlet(以免多部分處理)curl -F "file=@d:/tmp.txt" localhost:8050/zuul/microservice-file-upload/upload
複製代碼
# 通過zuul的請求都會使用hystrix進行包裹
# hystrix的超時時間
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
# zuul使用了ribbon作負載均衡
ribbon:
ConnectTimeout: 3000
ReadTimeout: 60000
複製代碼
==[注]== 超時問題解決後,也可能存在堆內存過小,致使上傳失敗,能夠堆tomcat進行以下設置: 點這裏標題: 禁用zuul過濾器
SpringCloud在代理和服務器模式下都默認啓用了許多ZuulFilter bean。
有關能夠啓用的過濾器列表,請參閱Zuul過濾器包。
若是要禁用一個過濾器,請參照以下設置zuul.<SimpleClassName>.<filterType>.disable=true
;按照慣例,過濾器後的包是Zuul過濾器類型。
例如,要禁用org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter
需設置zuul.SendResponseFilter.post.disable = true