码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • pac自动代理


    文章目录

    • 1.pac 定义
    • 2. 参考配置地址
    • 3. 实际配置案例
      • 3.1 编写pac文件
        • 3.1.1 return 语句有三种指令:
        • 3.1.2 内置函数
          • 3.1.2.1 dnsDomainIs
          • 3.1.2.2 shExpMatch
          • 3.1.2.3 isInNet
          • 3.1.2.4 主机ip
          • 3.1.2.5 dnsResolve
          • 3.1.2.6 isPlainHostName
          • 3.1.2.7 isResolvable
          • 3.1.2.8 dnsDomainLevels
      • 3.2 配置nginx,将pac文件上传到服务器
      • 3.3 配置自动代理

    1.pac 定义

    PAC,一个自动代理配置脚本,包含了很多使用 JavaScript 编写的规则,它能够决定网络流量走默认通道还是代理服务器通道,控制的流量类型包括:HTTP、HTTPS 和 FTP。

    本质是一段js

    function FindProxyForURL(url, host) {
    return "DIRECT";
    }
    
    • 1
    • 2
    • 3

    2. 参考配置地址

    地址:pac配置地址

    3. 实际配置案例

    3.1 编写pac文件

    下面这段表示的是如果是本机ip192.168.8.0网段的,就走192.168.2.207:443代理,如果不是的话,就直连

    function FindProxyForURL(url, host) {
        if (isInNet(myIpAddress(), "192.168.8.0", "255.255.255.0")) {
          return "PROXY 192.168.2.207:443";
        }
        return "DIRECT";
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.1.1 return 语句有三种指令:

    • DIRECT,表示无代理直接连接
    • PROXY host:port,表示走host:port 的 proxy 服务
    • SOCKS host:port,表示走host:port 的 socks 服务

    3.1.2 内置函数

    3.1.2.1 dnsDomainIs

    类似于 ==,但是对大小写不敏感,

    if (dnsDomainIs(host, "google.com") || 
    dnsDomainIs(host, "www.google.com")) {
    return "DIRECT";
    }
    
    • 1
    • 2
    • 3
    • 4
    3.1.2.2 shExpMatch

    Shell 正则匹配,* 匹配用的比较多,可以是*.http://example.com,也是可以下面这样,

    if (shExpMatch(host, "vpn.domain.com") ||
    shExpMatch(url, "http://abcdomain.com/folder/*")) {
    return "DIRECT"; 
    }
    
    • 1
    • 2
    • 3
    • 4
    3.1.2.3 isInNet

    判断是否在网段内容,比如 10.1.0.0 这个网段,10.1.1.0 就在网段中,

    if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0")) {
    return "DIRECT";
    }
    
    • 1
    • 2
    • 3
    3.1.2.4 主机ip
    if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0")) {
    return "PROXY 10.10.5.1:8080";
    }
    
    • 1
    • 2
    • 3
    3.1.2.5 dnsResolve

    通过 DNS 查询主机 ip,

    if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
    isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
    isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
    isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0")) {
    return "DIRECT";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    3.1.2.6 isPlainHostName

    判断是否为诸如http://barret/,http://server-name/ 这样的主机名,

    if (isPlainHostName(host)) {
    return "DIRECT";
    }
    
    • 1
    • 2
    • 3
    3.1.2.7 isResolvable

    判断主机是否可访问

    if (isResolvable(host)) {
    return "PROXY proxy1.example.com:8080";
    }
    
    • 1
    • 2
    • 3
    3.1.2.8 dnsDomainLevels

    返回是几级域名,比如dnsDomainLevels(http://barretlee.com) 返回的结果就是 1,

    if (dnsDomainLevels(host) > 0) {
    return "PROXY proxy1.example.com:8080";
    } else {
    return "DIRECT";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2 配置nginx,将pac文件上传到服务器

    本案例放置pac文件的路径

    在这里插入图片描述

    nginx 配置

     location /proxy.pac {
          alias /usr/local/openresty/nginx/pac/proxy.pac; //绝对路径
        }
    
    • 1
    • 2
    • 3

    3.3 配置自动代理

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    k8s使用时无法ping通服务器From IP地址 icmp_seq=1 Destination Host Unreachable
    Allegro如何输出STP文件操作指导
    桌面画图工具:Pointofix(fertig)
    C语言习题练习4--函数递归
    蓝桥集训之木棒
    文件的其他操作命令
    i = i++ 计算过程还不会?C/C++ 的输出语句与Java 有何不同?
    六大设计原则
    NTP时间服务器优先级配置
    小试牛刀:Go 反射帮我把 Excel 转成 Struct
  • 原文地址:https://blog.csdn.net/yaoxie1534/article/details/127983912
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号