天天看點

解決Nginx代理iServer的HTTP協定成HTTPS後頁面出現跳轉回HTTP協定的情況

作者:Carlo

背景:最近很多小夥伴使用Nginx代理iServer,将HTTP協定成HTTPS協定,但是可能會出現以下幾種情況:

(1)

圖檔、js、css等靜态資源無法加載

解決Nginx代理iServer的HTTP協定成HTTPS後頁面出現跳轉回HTTP協定的情況

(2)

代理後頁面跳轉回HTTP協定

解決Nginx代理iServer的HTTP協定成HTTPS後頁面出現跳轉回HTTP協定的情況

(3)

代理後通路服務管理界面提示“該使用者無查詢服務通路統計資訊權限”

解決Nginx代理iServer的HTTP協定成HTTPS後頁面出現跳轉回HTTP協定的情況

針對上述情況應該如何解決問題呢?其實這些問題都是因為代理後丢失https協定,導緻請求變成http,下面我将詳細講解如何避免這個問題。

本文采用的OpenSSL去生成公鑰和私鑰。生成密鑰的方式可以參考部落格(

Nginx代理iServer的HTTP協定成HTTPS)介紹得比較詳細,在此就不做多餘的說明了。

首先我們需要引入一個Nginx知識:

sub_filter子產品

為Nginx官方自帶的子產品,功能為替換掉傳回給用戶端資料的指定内容。需要使用該功能時隻需要在編譯時添加對該子產品的支援,便會編譯到Nginx的核心。本需介紹的方式就是利用sub_filter将HTTP替換成HTTPS。

sub_filter文法包括:

sub_filter_types

:*; 需要替換的類型,如text/htnl text/plain application/ javascript等,以空格分隔,預設隻查找文本型檔案;

sub_filter_once

: on/off; 是否隻替換一次,on是開啟此功能,off是關閉——預設值是on;

sub_filter

: xxx1 xxx2; 前面的參數為原始内容,後面的參數為替換後的内容。

Nginx配置說明:

# https配置
    server {
		listen       8000 ssl;
		server_name  ip;
		ssl_certificate      nginxRSAcert.pem;
		ssl_certificate_key  nginxRSAcert.key;
		ssl_session_cache    shared:SSL:1m;
		ssl_session_timeout  5m;
		ssl_ciphers  HIGH:!aNULL:!MD5;
		ssl_prefer_server_ciphers  on;
		location / {
			proxy_pass   http://ip:8090;
			proxy_set_body $request_body;
			proxy_set_header Accept-Encoding "";
			proxy_set_header Host $host:8000;
 			sub_filter_once off;
			sub_filter_types *;
			sub_filter 'http://ip:8000/iserver' 'https://ip:8000/iserver';
		}
  }

           

結果驗證:

(1)

圖檔、js、css靜态資源正常加載

解決Nginx代理iServer的HTTP協定成HTTPS後頁面出現跳轉回HTTP協定的情況

(2)

代理後頁面跳轉回均為HTTPS協定

解決Nginx代理iServer的HTTP協定成HTTPS後頁面出現跳轉回HTTP協定的情況

(3)

代理後通路服務管理界面正常

解決Nginx代理iServer的HTTP協定成HTTPS後頁面出現跳轉回HTTP協定的情況

繼續閱讀