nginx任意反代

Hello World 2022-05-03 PM 64℃ 0条

介绍

今天看到nginx任意反代任何网站觉得很有意思,特此分享一下。
localhost/https://baidu.com ,打开就是百度的网页。
localhost/https://google.com,打开就是谷歌的网页。

坏境:debian10
一台吃灰机器测试,先执行apt update,接下来更新apt upgrade,然后安装所需程序nginx apt install nginx

使用包安装Nginx,它的配置文件是在/etc/nginx下,网站路径默认是在/var/www/html下。

创建网站目录

代码如下:

# 创建目录结构
sudo mkdir -p /var/www/localhost/html
# 使用$USER环境变量分配目录的所有权
sudo chown -R $USER:$USER /var/www/localhost/html
# 更改Web根目录的权限
sudo chmod -R 755 /var/www/localhost

创建nginx配置块

vi /etc/nginx/sites-available/localhost

写入以下配置,即反代任意网站:

server {
        listen        80;
        server_name  你的域名; #改成自己的域名
        root   /var/www/localhost/html; #改自己的服务器目录

        set $custom_host "https://www.baidu.com";
        set $custom_host3 "/";
        set $custom_host5 "/";
        if ($request_uri ~* ^\/((http|https)://(www.)?(\w+(\.)?)+)(.*?)$) {
            set $custom_host $1;

            set $custom_host3 $6;
        }
        
        if ($custom_host3 = ""){
            set $custom_host3 "/";
        }
        if ($custom_host3 = " "){
            set $custom_host3 "/";
        }
        if ($request_uri ~* ^\/((http|https)://(www.)?(\w+(\.)?)+)(.+)\?(.+)$) {
            set $custom_host3 $6;
        }
        set $custom_host2 "www.baidu.com";

        if ($request_uri ~* ^\/((http|https)://)((www.)?(\w+(\.)?)+)(.*?)$) {
            set $custom_host2 $3;
            set $custom_host5 $1;
        }
        if ($request_uri ~* ^\/((http|https)://)((www.)?(\w+(\.)?)+)$) {
            set $custom_host2 $3;
            set $custom_host5 $1;
        }
        set $current "http://";
        if ($scheme = https) {
            set $current "https://";
        }
        location / {
            rewrite /(.*)$ $custom_host3 break;
            proxy_connect_timeout 100s;
            proxy_set_header x-forwarded-for $remote_addr;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            set $ishttp "http";
            if ($custom_host5 = https://) {
                set $ishttp https;
            }
            proxy_set_header X-Forwarded-Proto $ishttp;
            proxy_set_header Host $custom_host2;
            proxy_cache_key    $host$uri$is_args$args;


            proxy_set_header Cookie $http_cookie;
            proxy_cache_methods GET;
            proxy_cache_methods POST;
            proxy_cache_methods HEAD;
            proxy_set_header Accept-Encoding "";
            #proxy_connect_timeout      15000;
            proxy_send_timeout         15000;
            proxy_read_timeout         15000;
            sub_filter_types *;
            proxy_cache_valid 200 304 301 1s;
            add_header TJCDN-Cache "$upstream_cache_status";
            proxy_temp_file_write_size 512000k;
            resolver 8.8.8.8; #改为自己想要的DNS
            proxy_set_header Accept-Encoding "";
            sub_filter "<title" '<base href="$current$host/$custom_host/" />\n<title';
            sub_filter "\"/" '"';
            sub_filter "http://$custom_host2" "$current$host/$custom_host";
            sub_filter "https://$custom_host2" "$current$host/$custom_host";
            sub_filter_once off;
            proxy_pass $custom_host;
        }

}

保存退出

建立软链接

ln -s /etc/nginx/sites-available/localhost /etc/nginx/sites-enabled/

配置哈希存储区内存参数

vi /etc/nginx/nginx.conf

将server_name_hash_bucket_size 64行删除前面的#注释,保存退出

添加proxy_headers_hash参数

vi /etc/nginx/nginx.conf

写入以下内容:

http{
    ......
    proxy_headers_hash_max_size 51200;
    proxy_headers_hash_bucket_size 6400;
    ......
}

保存退出。

测试执行

检测是否无报错

nginx -t 

无报错即可重载配置,然后访问你配置的域名查看

nginx -s reload
标签: nginx

非特殊说明,本博所有文章均为博主原创。

上一篇 python使用代理
下一篇 没有了

评论啦~