Nginx 反向代理,提供 http 訪問,代理 https 外站內容

場景:在內網提供 http 訪問外網 https 網站資源。

內網架設 nginx http 站點,通過 http://aaa.com 供訪問,nginx 收到 http 請求後,反射代理外網 https://bbb.com。

配置文件:

server{
	listen 80;
	server_name aaa.com;
	resolver 192.168.1.1 valid=300s;
	resolver_timeout 300s;
	location / {
        set $remotedomain "bbb.com:8383";
		proxy_pass https://$remotedomain;
		proxy_set_header Host      $host;
		proxy_redirect https:// http://;
	}
}

1、proxy_set_header Host $host
加這項設置,bbb.com 可以獲取到用戶是通過哪個域名來訪問資源的。這樣,生成頁面鏈接時,會指向 aaa.com,而不是外網的域名 bbb.com

2、proxy_redirect https:// http://
由於訪問的 bbb.com 是 https 而不是 http,獲取到的頁面,頁面中的鏈接很有可能是 https://aaa.com/ 而不是 http://aaa.com,若不加此項,nginx 不會處理 https 的請求,默認只處理 http 的請求。
加了此項後,nginx 會把 https://aaa.com/ 請求轉向到 http://aaa.com。

3、resolver 和 set $remotedomain 變量
這是爲了動態解析域名,如果 bbb.com 是靜態 IP,就沒必要使用這種方式,只要直接寫到 proxy_pass 中即可。
resolver 192.168.1.1 指定的是 DNS 服務器地址,可以用路由器地址或公共 DNS,如:8.8.8.8

4、real_IP
由於不關心客戶端實際內網 IP 地址,因此沒加這些 http header 相關參數重寫的選項,請按實際需求酌情設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章