在某些业务场景中需要一种代理方式,就是隐藏某个域名使用另一个域名去代理被需要隐藏的域名,在别人抓包或者别人查看访问地址的时候,看的域名都不是真实域名地址。所以需要用到这种代理方式。
需要被代理的B域名和地址:
https://www.tengxu.com/stronge/61541fff9ee65f0001aca1eb.jpg?gue=s&kkl=889
通过A域名代理之后的地址:
https://www.baidu.com/stronge/61541fff9ee65f0001aca1eb.jpg?gue=s&kkl=889
下面代码中,location / 和 loaction ^~/stronge/ 都可以使用
- server {
- listen 443 ssl http2;
- server_name www.baidu.com;
- gzip on;
- ssl_certificate www.baidu.com.pem;
- ssl_certificate_key www.baidu.com.pem;
- ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
- ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
- ssl_prefer_server_ciphers on;
- ssl_session_cache shared:SSL:10m;
- ssl_session_timeout 10m;
- add_header Strict-Transport-Security "max-age=31536000";
-
- location / {
- proxy_redirect off;
- proxy_set_header Host www.tengxu.com;
- proxy_pass https://www.tengxu.com$request_uri;
- }
-
- location ^~/stronge/ {
- proxy_redirect off;
- proxy_set_header Host www.tengxu.com;
- proxy_pass https://www.tengxu.com$request_uri;
- }
- }
$request_uri; 是后面的路径
$request_uri 的截取,代理后修改上下文,去伪链接
比如B域名没有上下文,A代理B域名时,加入上下文。
A域名:https://www.tengxu.com/61541fff9ee65f0001aca1eb.jpg?gue=s&kkl=889
B域名:https://www.baidu.com/paper/61541fff9ee65f0001aca1eb.jpg?gue=s&kkl=889
nginx 配置:
- location ^~/paper/ {
-
- set $new_request_uri $request_uri;
-
- if ($request_uri ~ ^/paper/(.+)$) {
- set $new_request_uri $1;
- }
- proxy_ssl_server_name on;
- proxy_redirect off;
- proxy_set_header Host www.baidu.com;
- proxy_pass https://www.baidu.com/$new_request_uri;
- }
if ($request_uri ~ ^/paper/(.+)$) 这一段截取字符串时,会将最前面的 / 去除.
所以,$new_request_uri 前面必须要加 / 成为 /$new_request_uri
变成:https://www.baidu.comhttps://
最重要的一条:必须要在 nginx 的http{} 中加上以下解析:
resolver 8.8.8.8;