nginx怎么根據URL轉發請求

代理服務器:sockerserver監聽某個端口,根據http報文連接到指定服務器端口,進行數據請求
– http代理
http請求經過代理服務器,代理服務器只要負責轉發相應的http響應體就可以了。
– https代理
https請求經過代理服務器,會發送一個connect報文,用于和代理服務器建立隧道,如果代理服務器返回http 200,則建立成功,后續代理服務器只要負責轉發數據就行,實際上ssl/tls握手還是發生在客戶端和真實服務器。

proxyservlet

因為該后臺項目8089端口可以訪問服務器fastdfs服務,所以我首先想到的是使用springboot的proxyservlet把指定請求代理到服務器8088端口

spring boot 的主 servlet 為 springmvc的dispatcherservlet,其默認的url-pattern為“/”,如果我們想要為某個url添加不同的調用(其他服務器接口),則需要創建新的代理servlet,會使用到servletregistrationbean,創建一個新的proxyservlet來處理不同端口的監聽和數據的發送,并將它注冊到springboot管理的servletcontext中(設置指定服務器和端口,請求轉發的接口)

依賴

<dependency> ?<groupid>org.mitre.dsmiley.httpproxy</groupid> ?<artifactid>smiley-http-proxy-servlet</artifactid> ?<version>1.7</version> ?</dependency>

配置

###?配置代理 #請求resource時代理轉發到端口8088項目中 proxy.test.servlet_url_one=?/resource/* proxy.test.target_url_one=?https://localhost:8088
@component @data public?class?proxyfilterservlet?{ ?@value("${proxy.test.target_url_one}") ?private?string?targeturl; ?@value("${proxy.test.servlet_url_one}") ?private?string?servleturl; }

更改config添加

@configuration public?class?proxyservletconfig?{ ?@autowired ?private?proxyfilterservlet?proxyfilterservlet; ?//多個代理servlet可以配置多個bean ?@bean ?public?servletregistrationbean?servletregistrationbean(){ ?servletregistrationbean?servletregistrationbean?=?new?servletregistrationbean(new?proxyservlet(),?proxyfilterservlet.getservleturl()); ?//這個setname必須要設置,并且多個的時候,名字需要不一樣 ?servletregistrationbean.setname("go_backend"); ?servletregistrationbean.addinitparameter("targeturi",?proxyfilterservlet.gettargeturl()); ?servletregistrationbean.addinitparameter(proxyservlet.p_log,?"false"); ?return?servletregistrationbean; ?} }

通過servlet容器來建立與目標服務器連接,畢竟沒有nginx這樣的專業代理服務器強

nginx—代理轉發

  • 這個時候我想到了服務器之間添加一層nginx,來把不同的服務請求轉發到不同的端口api去處理

把需要請求的外網的請求轉到同一服務器內網端口

server?{ ?listen?80; ?server_name?127.0.0.1; ? ?location?/?{ ?proxy_pass?http://127.0.0.1:3000; ?} ? ?location?~?/api/?{ ?proxy_pass?http://172.30.1.123:8081; ?} }

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享