負載均衡將https請求轉發后端http服務報錯:The plain HTTP request was sent to HTTPS port

https請求報錯:The plain HTTP request was sent to HTTPS port


示例背景描述:

  • www.test.com:11001服務需要對互聯網使用https提供服務
  • 后端java服務不支持https請求,且后端程序無法修改,僅支持http請求

問題描述:

  • 因此在訪問https://www.test.com:11001,URL會跳轉http://www.test.com:11001,然后報錯The plain HTTP request was sent to HTTPS port

報錯如下:
在這里插入圖片描述

解決思路:通過nginx代理

此處暫時將后端服務器設定為192.168.1.1,具體配置如下:

server {listen 11001;server_name  localhost;location / {proxy_pass http://192.168.1.1:11001/;proxy_set_header Host $host:$server_port; # 包含端口號防止丟失proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto https; # 強制設置協議為 HTTPSproxy_set_header X-Forwarded-Port $server_port;  # 傳遞端口# 重定向修正proxy_redirect ~^(http://[^:/]+)(:([0-9]+))?/(.*)$ https://$host:$server_port/$4;proxy_redirect ~^(http://)([^/]+)/(.*)$ https://$host:$server_port/$3;# 可選:日志調試access_log /var/log/nginx/redirect_fix.log main;error_log /var/log/nginx/redirect_error.log debug;# 可選配置proxy_connect_timeout 60s;proxy_read_timeout 60s;}# 可選配置error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

關鍵配置說明

1、proxy_redirect 正則表達式?:

proxy_redirect ~^(http://[^:/]+)(:([0-9]+))?/(.*)$ https://$host:$server_port/$4;
  • 匹配任何 HTTP 重定向:http://domain:port/path 或 http://domain/path
  • 替換為:https://原始域名:11001/path

2、?備用規則?:?

proxy_redirect ~^(http://)([^/]+)/(.*)$ https://$host:$server_port/$3;
  • 匹配格式:http://anything/path
  • 替換為:https://原始域名:11001/path

3、?強制協議頭部?:

proxy_set_header X-Forwarded-Proto https;
  • 即使后端服務不使用這個頭部,也設置它以保持一致性

測試與驗證方法
1、測試配置:

nginx -t

2、重載配置:

nginx -s reload

3、監控日志:

tail -f /var/log/nginx/access.log 
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/redirect_fix.log
tail -f /var/log/nginx/redirect_error.log

4、重新訪問測試
https://www.test.com:11001


常見問題排查表

問題現象可能原因解決方案
重定向循環后端服務也嘗試重定向檢查后端響應是否已經是HTTPS
端口號不正確正則匹配失敗添加更通用的匹配規則
HTTPS證書錯誤證書不匹配檢查SLB證書是否有效
404 錯誤路徑被修改檢查正則中的路徑捕獲組 如 $4 和 $3

如果上述配置仍有問題,使用這個更強大的版本:

proxy_redirect ~^http(://[^/]+)?(:\d+)?/(.*)$ https://$host:$server_port/$3;
proxy_redirect ~^http(://)([^/]+)/(.*)$ https://$host:$server_port/$3;
proxy_redirect default;

這個規則會:

  • 匹配任何以 http 開頭的重定向
  • 替換為 https + 原始域名 + 11001端口
  • 保留原始路徑不變

最后我想說:請不要以此視為定論,這只是我的個人經驗

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82597.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82597.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82597.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(3)Playwright自動化-3-離線搭建playwright環境

1.簡介 如果是在公司局域網辦公,或者公司為了安全對網絡管控比較嚴格這種情況下如何搭建環境,我們簡單來看看 (第一種情況及解決辦法:帶要搭建環境的電腦到有網的地方在線安裝即可。 (第二種情況及解決辦法&#xf…

【Fiddler抓取手機數據包】

Fiddler抓取手機數據包的配置方法 確保電腦和手機在同一局域網 電腦和手機需連接同一Wi-Fi網絡。可通過電腦命令行輸入ipconfig查看電腦的本地IP地址(IPv4地址),手機需能ping通該IP。 配置Fiddler允許遠程連接 打開Fiddler,進入…

PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的區別

python容易編輯,因此用pyrx代替rxjava3做演示會比較快捷。 pyrx安裝命令: pip install rx 一、Subject(相當于 RxJava 的 PublishSubject) PublishSubject PublishSubject 將對觀察者發送訂閱后產生的元素,而在訂閱前…

BLE中心與外圍設備MTU協商過程詳解

一、MTU基礎概念?? 1. ??MTU定義?? ??最大傳輸單元(MTU)?? 指單次數據傳輸中允許的最大字節數,包含協議頭部(3字節)和有效載荷(最多517字節)。BLE默認MTU為??23字節??&a…

【華為云Astro-服務編排】服務編排使用全攻略

目錄 概述 為什么使用服務編排 服務編排基本能力 拖拉拽式編排流程 邏輯處理 對象處理 服務單元組合腳本、原生服務、BO、第三方服務 服務編排與模塊間調用關系 腳本 對象 標準頁面 BPM API接口 BO 連接器 如何創建服務編排 創建服務編排 如何開發服務編排 服…

centos實現SSH遠程登錄

1. 生成SSH密鑰對 首先,你需要在客戶端機器上生成一個SSH密鑰對。打開終端,執行以下命令 ssh-keygen 或ssh-keygen -t rsa -b 2048(效果相同) 按照提示操作,可以按回車鍵接受默認的文件名(通常是~/.ssh/id_…

定制開發開源AI智能名片S2B2C商城小程序在無界零售中的應用與行業智能升級示范研究

摘要:本文聚焦無界零售背景下京東從零售產品提供者向零售基礎設施提供者的轉變,探討定制開發開源AI智能名片S2B2C商城小程序在這一轉變中的應用。通過分析該小程序在商業運營成本降低、效率提升、用戶體驗優化等方面的作用,以及其與京東AI和馮…

ZooKeeper 安裝教程(Windows + Linux 雙平臺)

ZooKeeper 安裝教程(Windows + Linux 雙平臺) Zookeeper 和 Kafka 版本與 JDK 要求 一、安裝前準備 系統要求 Java 環境(JDK17+)開放端口:2181(客戶端),2888(集群通信),3888(選舉)安裝 Java Linux(Ubuntu/CentOS) # Ubuntu

【Git系列】如何同步原始倉庫的更新到你的fork倉庫?

🎉🎉🎉歡迎來到我們的博客!無論您是第一次訪問,還是我們的老朋友,我們都由衷地感謝您的到來。無論您是來尋找靈感、獲取知識,還是單純地享受閱讀的樂趣,我們都希望您能在這里找到屬于…

Could not obtain transaction-synchronized Session for current thread

背景 寫了一個函數,分別支持手動調用和定時任務調用。 測試的時候一直用手動點擊按鈕觸發函數,功能可用 等到了測試定時任務的時候,后臺報錯 Could not obtain transaction-synchronized Session for current thread錯誤分析 事務管理不匹…

linux nm/objdump/readelf/addr2line命令詳解

我們在開發過程中通過需要反匯編查看問題,那么我們這里使用rk3568開發板來舉例nm/objdump/readelf/addr2line 分析動態庫和可執行文件以及.o文件。 1,我們舉例nm/objdump/readelf/addr2line解析linux 內核文件vmlinux (1),addr2…

C++自定義簡單的內存池

內存池簡述 在C的STL的容器中的容器如vector、deque等用的默認分配器(allocator)都是從直接從系統的堆中申請內存,用一點申請一點,效率極低。這就是設計內存池的意義,所謂內存池,就是一次性向系統申請一大片內存(預分…

【極客日常】分享go開發中wire和interface配合的一些經驗

在先前一篇文章中,筆者給大家提到了go語言后端編程可以用wire依賴注入模塊去簡化單例服務的初始化,同時也可以解決服務單例之間復雜依賴的問題。但實事求是來講,用wire也是有一些學習成本的,wire在幫助解決復雜依賴的問題同時&…

20250605車充安服務器受木馬攻擊導致服務不可用

https://mp.weixin.qq.com/s/2JyxmDIDBa9_owNjIJ6UIg 因業務服務器受木馬攻擊,服務器網絡資源損耗,業務負載能力受損

web3-虛擬合約 vs 現實合同:權利、義務與資產的鏈上新秩序

web3-虛擬合約 vs 現實合同:權利、義務與資產的鏈上新秩序 一、智能合約vs真實世界合約 傳統合約:基礎要素 如下圖,現實世界的合約,會有一個條款,然后下面還有一個“Alice”的簽名 提出合約和接受合約; …

【面經分享】京東

線程池核心參數 7 個參數。 coreSize maxSize 阻塞隊列 時間 時間 線程工廠 拒絕策略 核心參數的話,有 coreSize、阻塞隊列、拒絕策略。 JVM 組成 內存上劃分: 線程私有:Java 虛擬機棧,本地方法棧、Tlab、程序計數器 …

工作流引擎-11-開源 BPM 項目 jbpm

工作流引擎系列 工作流引擎-00-流程引擎概覽 工作流引擎-01-Activiti 是領先的輕量級、以 Java 為中心的開源 BPMN 引擎,支持現實世界的流程自動化需求 工作流引擎-02-BPM OA ERP 區別和聯系 工作流引擎-03-聊一聊流程引擎 工作流引擎-04-流程引擎 activiti 優…

深度學習在非線性場景中的核心應用領域及向量/張量數據處理案例,結合工業、金融等領域的實際落地場景分析

一、工業場景:非線性缺陷檢測與預測 1. ?半導體晶圓缺陷檢測? ?問題?:微米級劃痕、顆粒污染等缺陷形態復雜,與正常紋理呈非線性關系。?解決方案?: ?輸入張量?:高分辨率晶圓圖像 → 三維張量 (Batch, Height,…

Python-線程同步

多線程 案例 說明: 唱歌方法 sing()跳舞方法 dance()啟用兩個線程調用主線程結束 代碼 # 導入線程模塊 import threading import timedef sing(name,age):time.sleep(2)print(唱歌者姓名: name ,年齡: str(age))print(正在唱…

前端八股之JS的原型鏈

1.原型的定義 每一個對象從被創建開始就和另一個對象關聯,從另一個對象上繼承其屬性,這個另一個對象就是 原型。 當訪問一個對象的屬性時,先在對象的本身找,找不到就去對象的原型上找,如果還是找不到,就去…