迁移文档并更新引用链接
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
'use client'
|
'use client'
|
||||||
import PrivacyPolicy from '@/docs/privacyPolicy.mdx'
|
import PrivacyPolicy from './privacyPolicy.mdx'
|
||||||
|
|
||||||
export default function CollectPage() {
|
export default function PrivacyPolicyPage() {
|
||||||
return (
|
return (
|
||||||
<PrivacyPolicy/>
|
<PrivacyPolicy/>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# 隐私政策
|
# 隐私政策
|
||||||
神龙HTTP(以下或简称“我们”)尊重并保护用户信息,并将以高度的责任感和谨慎的态度对待这些信息。当您使用神龙HTTP提供的代理服务时,我们将根据本隐私政策来收集、处理及分享您的信息。我们希望通过本隐私政策向您清晰地说明我们如何处理您的信息。因此,我们建议您完整阅读本隐私政策,以便了解如何保护您的隐私权。如果您有任何疑问、意见或建议,可以通过神龙HTTP提供的联系方式与我们联系。本政策将帮助您了解以下内容:
|
神龙HTTP(以下或简称"我们")尊重并保护用户信息,并将以高度的责任感和谨慎的态度对待这些信息。当您使用神龙HTTP提供的代理服务时,我们将根据本隐私政策来收集、处理及分享您的信息。我们希望通过本隐私政策向您清晰地说明我们如何处理您的信息。因此,我们建议您完整阅读本隐私政策,以便了解如何保护您的隐私权。如果您有任何疑问、意见或建议,可以通过神龙HTTP提供的联系方式与我们联系。本政策将帮助您了解以下内容:
|
||||||
|
|
||||||
一、适用范围
|
一、适用范围
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client'
|
'use client'
|
||||||
import UserAgreement from '@/docs/userAgreement.mdx'
|
import UserAgreement from './userAgreement.mdx'
|
||||||
|
|
||||||
export default function CollectPage() {
|
export default function UserAgreementPage() {
|
||||||
return (
|
return (
|
||||||
<UserAgreement/>
|
<UserAgreement/>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# 用户协议
|
# 用户协议
|
||||||
神龙HTTP(以下或简称“我们”)尊重并保护用户信息,并将以高度的责任感和谨慎的态度对待这些信息。当您使用神龙HTTP提供的代理服务时,我们将根据本隐私政策来收集、处理及分享您的信息。我们希望通过本隐私政策向您清晰地说明我们如何处理您的信息。因此,我们建议您完整阅读本隐私政策,以便了解如何保护您的隐私权。如果您有任何疑问、意见或建议,可以通过神龙HTTP提供的联系方式与我们联系。本政策将帮助您了解以下内容:
|
神龙HTTP(以下或简称"我们")尊重并保护用户信息,并将以高度的责任感和谨慎的态度对待这些信息。当您使用神龙HTTP提供的代理服务时,我们将根据本隐私政策来收集、处理及分享您的信息。我们希望通过本隐私政策向您清晰地说明我们如何处理您的信息。因此,我们建议您完整阅读本隐私政策,以便了解如何保护您的隐私权。如果您有任何疑问、意见或建议,可以通过神龙HTTP提供的联系方式与我们联系。本政策将帮助您了解以下内容:
|
||||||
|
|
||||||
一、适用范围
|
一、适用范围
|
||||||
|
|
||||||
@@ -4,6 +4,6 @@
|
|||||||
|
|
||||||
2、选择已连接的WIFI网络,点小箭头进入设置页面
|
2、选择已连接的WIFI网络,点小箭头进入设置页面
|
||||||
|
|
||||||
3、将代理设置为“手动”,填写主机名,端口信息,点击右上角保存
|
3、将代理设置为"手动",填写主机名,端口信息,点击右上角保存
|
||||||
|
|
||||||
4、打开手机浏览器搜索IP地址查询,若查询结果和设置的代理IP一致,则代理设置成功
|
4、打开手机浏览器搜索IP地址查询,若查询结果和设置的代理IP一致,则代理设置成功
|
||||||
@@ -40,3 +40,4 @@
|
|||||||
端口号: 8080 # 替换为实际端口
|
端口号: 8080 # 替换为实际端口
|
||||||
使用范围: 当前IE浏览器
|
使用范围: 当前IE浏览器
|
||||||
立即生效: 是
|
立即生效: 是
|
||||||
|
```
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
# 常见问题(总览)
|
# 常见问题(总览)
|
||||||
|
|
||||||
|
|
||||||
> 本文介绍如何在Firefox中配置静态和动态代理IP
|
> 本文介绍如何在Firefox中配置静态和动态代理IP
|
||||||
|
|
||||||
## 静态代理配置
|
## 静态代理配置
|
||||||
@@ -19,3 +18,4 @@
|
|||||||
"SOCKS主机": "45.76.123.89",
|
"SOCKS主机": "45.76.123.89",
|
||||||
"端口": "1080"
|
"端口": "1080"
|
||||||
}
|
}
|
||||||
|
```
|
||||||
@@ -25,3 +25,4 @@ Firefox 提供了多种代理设置方式,支持 HTTP/HTTPS 和 SOCKS5 协议
|
|||||||
about:preferences#general
|
about:preferences#general
|
||||||
// 或直接
|
// 或直接
|
||||||
about:preferences
|
about:preferences
|
||||||
|
```
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
# iOS 设置代理教程
|
# iOS 设置代理教程
|
||||||
|
|
||||||
本教程详细指导您在 iPhone 和 iPad 上配置代理服务器的完整步骤。
|
本教程详细指导您在 iPhone 和 iPad 上配置代理服务器的完整步骤。
|
||||||
# 开始前的准备
|
|
||||||
|
## 开始前的准备
|
||||||
|
|
||||||
在开始配置前,请确保您已获得以下信息:
|
在开始配置前,请确保您已获得以下信息:
|
||||||
- **代理服务器地址**(如:proxy.example.com 或 192.168.1.100)
|
- **代理服务器地址**(如:proxy.example.com 或 192.168.1.100)
|
||||||
- **端口号**(如:8080、8888)
|
- **端口号**(如:8080、8888)
|
||||||
@@ -21,6 +24,7 @@
|
|||||||
3. 默认状态为 **"关闭"**
|
3. 默认状态为 **"关闭"**
|
||||||
|
|
||||||
### 第三步:选择代理模式
|
### 第三步:选择代理模式
|
||||||
|
|
||||||
点击"配置代理",您会看到三种选项:
|
点击"配置代理",您会看到三种选项:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -28,3 +32,4 @@
|
|||||||
关闭: 不使用代理
|
关闭: 不使用代理
|
||||||
自动: 使用自动配置脚本(.pac文件)
|
自动: 使用自动配置脚本(.pac文件)
|
||||||
手动: 手动输入代理服务器信息
|
手动: 手动输入代理服务器信息
|
||||||
|
```
|
||||||
37
src/app/(home)/docs/mac-proxy/page.mdx
Normal file
37
src/app/(home)/docs/mac-proxy/page.mdx
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# macOS 设置代理教程
|
||||||
|
|
||||||
|
本教程详细指导您在 macOS 上配置代理服务器的完整步骤。
|
||||||
|
|
||||||
|
## 开始前的准备
|
||||||
|
|
||||||
|
在开始配置前,请确保您已获得以下信息:
|
||||||
|
- **代理服务器地址**(如:proxy.example.com 或 192.168.1.100)
|
||||||
|
- **端口号**(如:8080、8888)
|
||||||
|
- 如需认证:**用户名和密码**
|
||||||
|
- 企业网络可能需要的 **自动配置脚本 URL**
|
||||||
|
|
||||||
|
## 📱 Wi-Fi 网络代理设置(主要方式)
|
||||||
|
|
||||||
|
### 第一步:进入网络设置
|
||||||
|
1. 打开 **"系统设置"** 应用
|
||||||
|
2. 点击 **"网络"** 或 **"Wi-Fi"**
|
||||||
|
3. 确保已连接到需要设置代理的 Wi-Fi 网络
|
||||||
|
4. 点击 **"详情"** 或 **"高级"**
|
||||||
|
|
||||||
|
### 第二步:找到代理配置选项
|
||||||
|
1. 在网络详细信息页面中找到 **"代理"** 选项
|
||||||
|
2. 默认状态为 **"关闭"**
|
||||||
|
|
||||||
|
### 第三步:选择代理模式
|
||||||
|
|
||||||
|
点击"配置代理",您会看到几种选项:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# 模式选择说明
|
||||||
|
关闭: 不使用代理
|
||||||
|
自动代理发现: 自动发现代理
|
||||||
|
自动代理配置: 使用自动配置脚本(.pac文件)
|
||||||
|
网页代理(HTTP): 手动配置 HTTP 代理
|
||||||
|
安全网页代理(HTTPS): 手动配置 HTTPS 代理
|
||||||
|
SOCKS代理: 手动配置 SOCKS 代理
|
||||||
|
```
|
||||||
@@ -2,23 +2,26 @@
|
|||||||
|
|
||||||
在网络通信中,代理服务器是一个重要的中间实体,充当了客户端和目标服务器之间的中转站。它既能够提供安全性和隐私保护,又能够改善网络性能和访问控制。那么,究竟代理服务器是如何工作的呢?接下来就让我们一起深入了解。
|
在网络通信中,代理服务器是一个重要的中间实体,充当了客户端和目标服务器之间的中转站。它既能够提供安全性和隐私保护,又能够改善网络性能和访问控制。那么,究竟代理服务器是如何工作的呢?接下来就让我们一起深入了解。
|
||||||
|
|
||||||
1. 缓存和性能优化
|
## 代理服务器的作用
|
||||||
|
|
||||||
|
1. **缓存和性能优化**
|
||||||
|
|
||||||
代理服务器可以缓存已经请求过的资源,例如网页、图片和视频等,这样当其他客户端再次请求同样的资源时,代理服务器可以直接返回缓存中的副本,从而减少了向目标服务器发起请求的次数,提高了整体的访问速度和响应效率。
|
代理服务器可以缓存已经请求过的资源,例如网页、图片和视频等,这样当其他客户端再次请求同样的资源时,代理服务器可以直接返回缓存中的副本,从而减少了向目标服务器发起请求的次数,提高了整体的访问速度和响应效率。
|
||||||
|
|
||||||
2. 访问控制和过滤
|
2. **访问控制和过滤**
|
||||||
|
|
||||||
通过代理服务器,管理员可以限制特定用户或IP地址的访问权限。代理服务器可以设置访问规则,如阻止特定的URL、域名或协议,或者需要用户进行身份验证才能访问特定资源。这对于企业内部网络安全管理和家庭网络控制都非常有用。
|
通过代理服务器,管理员可以限制特定用户或IP地址的访问权限。代理服务器可以设置访问规则,如阻止特定的URL、域名或协议,或者需要用户进行身份验证才能访问特定资源。这对于企业内部网络安全管理和家庭网络控制都非常有用。
|
||||||
|
|
||||||
3. 隐私保护和匿名访问
|
3. **隐私保护和匿名访问**
|
||||||
|
|
||||||
代理服务器可以帮助用户隐藏真实的IP地址,提供匿名访问互联网的功能。在使用代理服务器时,用户的所有请求都会经过代理服务器转发,目标服务器无法直接获取到用户的真实身份信息,从而保护了用户的隐私。
|
代理服务器可以帮助用户隐藏真实的IP地址,提供匿名访问互联网的功能。在使用代理服务器时,用户的所有请求都会经过代理服务器转发,目标服务器无法直接获取到用户的真实身份信息,从而保护了用户的隐私。
|
||||||
|
|
||||||
配置代理服务器的方法
|
## 配置代理服务器的方法
|
||||||
|
|
||||||
1. 客户端配置
|
1. **客户端配置**
|
||||||
|
|
||||||
在大多数操作系统中,配置代理服务器的方法都相对简单。首先,打开网络设置选项,并找到代理服务器的设置项。根据你的需求,选择手动配置代理或者自动获取代理设置。如果你知道代理服务器的IP地址和端口号,将其填入相应的字段中即可。如果你需要身份验证或其他特殊设置,也可以在相应的位置进行配置。
|
在大多数操作系统中,配置代理服务器的方法都相对简单。首先,打开网络设置选项,并找到代理服务器的设置项。根据你的需求,选择手动配置代理或者自动获取代理设置。如果你知道代理服务器的IP地址和端口号,将其填入相应的字段中即可。如果你需要身份验证或其他特殊设置,也可以在相应的位置进行配置。
|
||||||
|
|
||||||
2. 代理服务器配置
|
2. **代理服务器配置**
|
||||||
|
|
||||||
代理服务器的配置则相对复杂一些,需要一定的网络知识和技术能力。首先,选择一款适合你需求的代理服务器软件,例如常用的Squid、Nginx等。然后,根据软件的文档和指南,按照要求进行安装和基本配置。在进行详细配置时,你可以根据实际需求进行设置,如缓存大小、访问规则、安全认证等。
|
代理服务器的配置则相对复杂一些,需要一定的网络知识和技术能力。首先,选择一款适合你需求的代理服务器软件,例如常用的Squid、Nginx等。然后,根据软件的文档和指南,按照要求进行安装和基本配置。在进行详细配置时,你可以根据实际需求进行设置,如缓存大小、访问规则、安全认证等。
|
||||||
11
src/app/(home)/docs/official-tutorial/page.mdx
Normal file
11
src/app/(home)/docs/official-tutorial/page.mdx
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# 浏览器设置代理教程
|
||||||
|
|
||||||
|
打开IE浏览器,选择"设置",点击"Internet选项",在弹出的"局域网LAN设置"中,代理服务器的复选框打上勾,并填写从神龙HTTP获取的ip地址及端口号,点击确定,刷新浏览器,浏览器的IP就改变了。
|
||||||
|
|
||||||
|
1、打开IE浏览器,选择"设置";
|
||||||
|
|
||||||
|
2、点击"Internet选项";
|
||||||
|
|
||||||
|
3、弹出"Internet选项"弹窗,选择连接—局域网设置;
|
||||||
|
|
||||||
|
4、在弹出的"局域网LAN设置"中,代理服务器的复选框打上勾,并填写从神龙HTTP代理获取的ip地址及端口。点击确定,即设置成功了。
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
1.进入个人中心-套餐管理页面,选择对应购买的套餐类型,点击【合并套餐】;
|
1.进入个人中心-套餐管理页面,选择对应购买的套餐类型,点击【合并套餐】;
|
||||||
|
|
||||||
2.输入被合并的套餐ID,点击确定。合并成功后,被合并的包量套餐IP总量增加,合并的包量套餐变更为“用完”。
|
2.输入被合并的套餐ID,点击确定。合并成功后,被合并的包量套餐IP总量增加,合并的包量套餐变更为"用完"。
|
||||||
|
|
||||||
三、修改时效
|
三、修改时效
|
||||||
|
|
||||||
@@ -1,206 +1,158 @@
|
|||||||
'use client'
|
'use client'
|
||||||
import {useState, useMemo, useCallback} from 'react'
|
import {useState, useMemo, useCallback} from 'react'
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
import {useParams, usePathname} from 'next/navigation'
|
import {usePathname} from 'next/navigation'
|
||||||
import {ChevronRight} from 'lucide-react'
|
import {ChevronRight} from 'lucide-react'
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
collapsed?: boolean
|
collapsed?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
// 菜单结构
|
// 简化的菜单配置 - 扁平结构,支持分组
|
||||||
const MENU_CONFIG = {
|
const MENU_ITEMS = [
|
||||||
tutorials: [
|
{
|
||||||
{
|
group: '官网教程',
|
||||||
title: '官网教程',
|
items: [
|
||||||
sectionKey: 'official-tutorial',
|
{key: 'browser-proxy', label: '浏览器设置代理教程'},
|
||||||
items: [
|
{key: 'package-operations', label: '套餐续费、合并、修改时效、补重操作'},
|
||||||
{key: 'browser-proxy', label: '浏览器设置代理教程'},
|
{key: 'fixed-package', label: '长效固定套餐操作手册'},
|
||||||
{key: 'package-operations', label: '套餐续费、合并、修改时效、补重操作'},
|
],
|
||||||
{key: 'fixed-package', label: '长效固定套餐操作手册'},
|
},
|
||||||
],
|
{
|
||||||
},
|
group: '客户端教程',
|
||||||
{
|
items: [
|
||||||
title: '客户端教程',
|
{key: 'ios-proxy', label: 'iOS设置代理教程'},
|
||||||
sectionKey: 'client-tutorial',
|
{key: 'windows10-proxy', label: 'Windows10电脑设置代理教程'},
|
||||||
items: [
|
{key: 'android-proxy', label: '安卓手机设置代理教程'},
|
||||||
{key: 'ios-proxy', label: 'iOS设置代理教程'},
|
],
|
||||||
{key: 'windows10-proxy', label: 'Windows10电脑设置代理教程'},
|
},
|
||||||
{key: 'android-proxy', label: '安卓手机设置代理教程'},
|
{
|
||||||
],
|
group: '操作指南',
|
||||||
},
|
items: [
|
||||||
{
|
{key: 'windows7-proxy', label: 'Windows7电脑设置代理教程'},
|
||||||
title: '操作指南',
|
{key: 'mac-proxy', label: 'MAC设置代理教程'},
|
||||||
sectionKey: 'operation-guide',
|
{key: 'firefox-proxy', label: '火狐浏览器设置代理'},
|
||||||
items: [
|
{key: 'socks5-usage', label: 'Socks5代理使用教程'},
|
||||||
{key: 'windows7-proxy', label: 'Windows7电脑设置代理教程'},
|
{key: 'http-notes', label: '使用 HTTP 代理注意事项'},
|
||||||
{key: 'mac-proxy', label: 'MAC设置代理教程'},
|
{key: 'official-tutorial', label: '浏览器设置代理教程'},
|
||||||
{key: 'firefox-proxy', label: '火狐浏览器设置代理'},
|
],
|
||||||
{key: 'socks5-usage', label: 'Socks5代理使用教程'},
|
},
|
||||||
],
|
{
|
||||||
},
|
group: '产品介绍',
|
||||||
],
|
items: [
|
||||||
features: [
|
{key: 'product-overview', label: '产品概述'},
|
||||||
{
|
{key: 'product-features', label: '产品功能'},
|
||||||
title: '产品介绍',
|
{key: 'product-cert', label: '实名认证与证书'},
|
||||||
sectionKey: 'product-intro',
|
],
|
||||||
items: [
|
},
|
||||||
{key: 'product-overview', label: '产品概述'},
|
{
|
||||||
{key: 'product-features', label: '产品功能'},
|
group: '常见问题',
|
||||||
],
|
items: [
|
||||||
},
|
{key: 'faq-general', label: '常见问题总览'},
|
||||||
{
|
{key: 'faq-billing', label: '计费与套餐问题'},
|
||||||
title: '常见问题',
|
],
|
||||||
sectionKey: 'faq',
|
},
|
||||||
items: [
|
{
|
||||||
{key: 'faq-general', label: '常见问题总览'},
|
group: '新闻资讯',
|
||||||
{key: 'faq-billing', label: '计费与套餐问题'},
|
items: [
|
||||||
],
|
{key: 'news-latest', label: '了解代理服务器的工作原理'},
|
||||||
},
|
{key: 'news-announce', label: '公告'},
|
||||||
{
|
],
|
||||||
title: '新闻资讯',
|
},
|
||||||
sectionKey: 'news',
|
{
|
||||||
items: [
|
group: '其他',
|
||||||
{key: 'news-latest', label: '了解代理服务器的工作原理'},
|
items: [
|
||||||
{key: 'news-announce', label: '公告'},
|
{key: 'online-ip-proxy', label: '在线 IP 代理地址'},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
]
|
||||||
}
|
|
||||||
|
|
||||||
export default function Sidebar({collapsed = false}: Props) {
|
export default function Sidebar({collapsed = false}: Props) {
|
||||||
const params = useParams()
|
|
||||||
const pathname = usePathname()
|
const pathname = usePathname()
|
||||||
|
|
||||||
// 判断当前所处的 help 子模块
|
// 获取当前文档 key (从 /help/{key} 路径中提取)
|
||||||
const getCategory = useCallback(() => {
|
const getCurrentKey = useCallback(() => {
|
||||||
if (!pathname) return 'tutorials'
|
const parts = pathname?.split('/') || []
|
||||||
if (pathname.includes('/help/features')) return 'features'
|
return parts[2] || '' // /help/{key} -> key
|
||||||
if (pathname.includes('/help/tutorials')) return 'tutorials'
|
|
||||||
return 'tutorials'
|
|
||||||
}, [pathname])
|
}, [pathname])
|
||||||
|
|
||||||
const category = getCategory()
|
const currentKey = getCurrentKey()
|
||||||
const MENU = category === 'features' ? MENU_CONFIG.features : MENU_CONFIG.tutorials
|
|
||||||
|
|
||||||
// 获取当前 sectionKey 和 itemKey
|
// 展开/收起状态
|
||||||
const getCurrentKeys = useCallback(() => {
|
const [expandedGroups, setExpandedGroups] = useState<Record<string, boolean>>({})
|
||||||
const pathParts = pathname?.split('/') || []
|
|
||||||
let sectionKey = ''
|
|
||||||
let itemKey = ''
|
|
||||||
|
|
||||||
if (pathParts.length >= 4) {
|
// 初始化:自动展开包含当前活跃项的分组
|
||||||
sectionKey = pathParts[3]
|
const initialExpandedGroups = useMemo(() => {
|
||||||
}
|
const result: Record<string, boolean> = {}
|
||||||
if (pathParts.length >= 5) {
|
MENU_ITEMS.forEach((section, index) => {
|
||||||
itemKey = pathParts[4]
|
const hasActive = section.items.some(item => item.key === currentKey)
|
||||||
}
|
if (hasActive || index === 0) {
|
||||||
|
result[section.group] = true
|
||||||
// 如果从 params 获取
|
|
||||||
if (!sectionKey && params?.section) {
|
|
||||||
sectionKey = String(params.section)
|
|
||||||
}
|
|
||||||
if (!itemKey && params?.key) {
|
|
||||||
itemKey = String(params.key)
|
|
||||||
}
|
|
||||||
|
|
||||||
return {sectionKey, itemKey}
|
|
||||||
}, [pathname, params])
|
|
||||||
|
|
||||||
const {sectionKey: currentSectionKey, itemKey: currentItemKey} = getCurrentKeys()
|
|
||||||
|
|
||||||
const expandedSections = useMemo(() => {
|
|
||||||
const newExpanded: Record<string, boolean> = {}
|
|
||||||
const hasActiveSection = MENU.some(s => s.sectionKey === currentSectionKey)
|
|
||||||
|
|
||||||
MENU.forEach((section, index) => {
|
|
||||||
if (section.sectionKey === currentSectionKey) {
|
|
||||||
newExpanded[section.title] = true
|
|
||||||
}
|
|
||||||
else if (!hasActiveSection && index === 0) {
|
|
||||||
newExpanded[section.title] = true
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
newExpanded[section.title] = false
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return newExpanded
|
|
||||||
}, [MENU, currentSectionKey])
|
|
||||||
|
|
||||||
// 使用 state 来跟踪用户的手动切换
|
|
||||||
const [userToggles, setUserToggles] = useState<Record<string, boolean>>({})
|
|
||||||
|
|
||||||
// 合并自动展开和用户手动切换的状态
|
|
||||||
const finalExpandedSections = useMemo(() => {
|
|
||||||
const result = {...expandedSections}
|
|
||||||
|
|
||||||
Object.keys(userToggles).forEach((title) => {
|
|
||||||
const section = MENU.find(s => s.title === title)
|
|
||||||
if (section && section.sectionKey !== currentSectionKey) {
|
|
||||||
result[title] = userToggles[title]
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}, [expandedSections, userToggles, MENU, currentSectionKey])
|
}, [currentKey])
|
||||||
|
|
||||||
const toggleSection = (title: string) => {
|
// 合并自动展开和用户手动切换
|
||||||
const section = MENU.find(s => s.title === title)
|
const finalExpandedGroups = useMemo(() => {
|
||||||
if (!section) return
|
return {...initialExpandedGroups, ...expandedGroups}
|
||||||
if (section.sectionKey === currentSectionKey) {
|
}, [initialExpandedGroups, expandedGroups])
|
||||||
setUserToggles(prev => ({
|
|
||||||
...prev,
|
const toggleGroup = (group: string) => {
|
||||||
[title]: !finalExpandedSections[title],
|
setExpandedGroups(prev => ({
|
||||||
}))
|
...prev,
|
||||||
}
|
[group]: !finalExpandedGroups[group],
|
||||||
else {
|
}))
|
||||||
setUserToggles(prev => ({
|
|
||||||
...prev,
|
|
||||||
[title]: !prev[title],
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构建链接地址
|
const getItemHref = (key: string) => `/help/${key}`
|
||||||
const getItemHref = useCallback((sectionKey: string, itemKey: string) => {
|
|
||||||
return category === 'features'
|
|
||||||
? `/help/features/${sectionKey}/${itemKey}`
|
|
||||||
: `/help/tutorials/${sectionKey}/${itemKey}`
|
|
||||||
}, [category])
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<aside className={`bg-white rounded-lg p-3 transition-all duration-200 shrink-0 ${collapsed ? 'w-20' : 'w-72'}`}>
|
<aside
|
||||||
|
className={`bg-white rounded-lg p-3 transition-all duration-200 shrink-0 ${
|
||||||
|
collapsed ? 'w-20' : 'w-72'
|
||||||
|
}`}
|
||||||
|
>
|
||||||
<nav className="space-y-2">
|
<nav className="space-y-2">
|
||||||
{MENU.map(section => (
|
{MENU_ITEMS.map(section => (
|
||||||
<div key={section.title}>
|
<div key={section.group}>
|
||||||
<div
|
<div
|
||||||
onClick={() => toggleSection(section.title)}
|
onClick={() => toggleGroup(section.group)}
|
||||||
className={`flex items-center gap-2 cursor-pointer px-3 py-2 rounded-sm transition-colors ${finalExpandedSections[section.title] && !collapsed ? 'bg-blue-50' : 'hover:bg-slate-50'}`}
|
className={`flex items-center gap-2 cursor-pointer px-3 py-2 rounded-sm transition-colors ${
|
||||||
|
finalExpandedGroups[section.group] && !collapsed
|
||||||
|
? 'bg-blue-50'
|
||||||
|
: 'hover:bg-slate-50'
|
||||||
|
}`}
|
||||||
>
|
>
|
||||||
<div className={`w-4 flex items-center justify-center text-sm text-slate-400 transform transition-transform ${finalExpandedSections[section.title] ? 'rotate-90' : ''}`}>
|
<div
|
||||||
<ChevronRight size={16}/>
|
className={`w-4 flex items-center justify-center text-sm text-slate-400 transform transition-transform ${
|
||||||
|
finalExpandedGroups[section.group] ? 'rotate-90' : ''
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
<ChevronRight size={16} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{!collapsed && (
|
{!collapsed && (
|
||||||
<div className="text-lg font-semibold text-slate-900">
|
<div className="text-lg font-semibold text-slate-900">
|
||||||
{section.title}
|
{section.group}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{finalExpandedSections[section.title] && (
|
{finalExpandedGroups[section.group] && (
|
||||||
<ul className={`mt-1 text-base ${collapsed ? 'hidden' : 'block'}`}>
|
<ul className={`mt-1 text-base ${collapsed ? 'hidden' : 'block'}`}>
|
||||||
{section.items.map((item) => {
|
{section.items.map(item => {
|
||||||
const isActive = currentItemKey === item.key
|
const isActive = currentKey === item.key
|
||||||
const href = getItemHref(section.sectionKey, item.key)
|
const href = getItemHref(item.key)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li key={item.key}>
|
<li key={item.key}>
|
||||||
<Link
|
<Link
|
||||||
href={href}
|
href={href}
|
||||||
className={`block pl-8 py-2 text-base cursor-pointer transition-colors ${
|
className={`block pl-8 py-2 text-base cursor-pointer transition-colors ${
|
||||||
isActive ? 'bg-blue-50 font-semibold' : 'text-slate-700 hover:text-slate-900 hover:bg-slate-50'
|
isActive
|
||||||
|
? 'bg-blue-50 font-semibold'
|
||||||
|
: 'text-slate-700 hover:text-slate-900 hover:bg-slate-50'
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
{item.label}
|
{item.label}
|
||||||
|
|||||||
29
src/app/(home)/docs/socks5-usage/page.mdx
Normal file
29
src/app/(home)/docs/socks5-usage/page.mdx
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# 使用 Socks5 代理上网
|
||||||
|
|
||||||
|
Socks5 是一种网络代理协议,用于在计算机之间传递数据,同时提供匿名性和安全性。
|
||||||
|
|
||||||
|
## Socks5 代理的优点
|
||||||
|
|
||||||
|
1. **更高的安全性**:Socks5 协议支持加密传输,可以确保数据在传输过程中的安全性。
|
||||||
|
2. **更高的匿名性**:Socks5 协议支持 UDP 和 TCP 流量代理,并且支持不同的身份验证方式,可以帮助用户隐藏真实 IP 地址,保护隐私。
|
||||||
|
3. **更高的灵活性**:Socks5 代理可以让应用程序无需修改代码即可使用代理 IP,同时支持多种身份验证方式和传输协议,提高了灵活性和可用性。
|
||||||
|
|
||||||
|
## Socks5 代理工作流程
|
||||||
|
|
||||||
|
1. 用户向代理服务器发送连接请求。
|
||||||
|
2. 代理服务器收到连接请求后,根据用户请求的目标地址和端口,向目标服务器发起连接请求。
|
||||||
|
3. 目标服务器收到代理服务器的连接请求后,回复确认连接。
|
||||||
|
4. 代理服务器收到目标服务器的确认连接后,将数据转发给目标服务器。
|
||||||
|
5. 目标服务器接收到数据后,将数据返回给代理服务器。
|
||||||
|
6. 代理服务器收到数据后,将数据转发给用户。
|
||||||
|
|
||||||
|
在这个过程中,Socks5 代理服务器起到了中间传输的作用,将用户的请求转发给目标服务器,并将目标服务器的响应返回给用户。由于传输过程中使用的是代理服务器的 IP 地址和端口号,所以用户的真实 IP 地址和端口号得到了隐藏。
|
||||||
|
|
||||||
|
## 配置方法概览
|
||||||
|
|
||||||
|
| 方法 | 适用场景 | 复杂度 | 持久性 |
|
||||||
|
|------|----------|--------|--------|
|
||||||
|
| 手动设置 | 单用户临时使用 | 低 | 重启浏览器失效 |
|
||||||
|
| 自动代理(PAC) | 企业环境 | 中 | 永久 |
|
||||||
|
| 扩展程序 | 灵活切换规则 | 高 | 永久 |
|
||||||
|
| 系统级代理 | 全局代理 | 低 | 系统重启失效 |
|
||||||
7
src/app/(home)/docs/windows10-proxy/page.mdx
Normal file
7
src/app/(home)/docs/windows10-proxy/page.mdx
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# Windows10 电脑设置代理教程
|
||||||
|
|
||||||
|
1、点击桌面右下角网络连接图标,选择"网络和Internet设置"选项
|
||||||
|
|
||||||
|
2、点击"代理",将"使用代理服务器"设置为开,输入地址和端口后保存
|
||||||
|
|
||||||
|
3、浏览器打开百度,输入IP地址查询,若查询结果和设置的代理IP一致,则代理设置成功
|
||||||
@@ -65,4 +65,3 @@ GET https://lanhuip.com/api/extract?i=1&t=2&a=广东省&b=广州市&s=移动&d=1
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ import {toast} from 'sonner'
|
|||||||
import {merge} from '@/lib/utils'
|
import {merge} from '@/lib/utils'
|
||||||
import {Combobox} from '@/components/ui/combobox'
|
import {Combobox} from '@/components/ui/combobox'
|
||||||
import cities from './_assets/cities.json'
|
import cities from './_assets/cities.json'
|
||||||
import ExtractDocs from '@/docs/extract.mdx'
|
import ExtractDocs from './extract.mdx'
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
import {useProfileStore} from '@/components/stores/profile'
|
import {useProfileStore} from '@/components/stores/profile'
|
||||||
|
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ function BalanceOrLogin(props: {
|
|||||||
mode: Number(props.mode),
|
mode: Number(props.mode),
|
||||||
live: Number(props.live),
|
live: Number(props.live),
|
||||||
daily_limit: props.dailyLimit,
|
daily_limit: props.dailyLimit,
|
||||||
expire: Number(props.expire),
|
expire_at: Number(props.expire),
|
||||||
quota: props.quota,
|
quota: props.quota,
|
||||||
},
|
},
|
||||||
}}/>
|
}}/>
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ function BalanceOrLogin(props: {
|
|||||||
mode: Number(props.mode),
|
mode: Number(props.mode),
|
||||||
live: Number(props.live),
|
live: Number(props.live),
|
||||||
quota: props.quota,
|
quota: props.quota,
|
||||||
expire: Number(props.expire),
|
expire_at: Number(props.expire),
|
||||||
daily_limit: props.dailyLimit,
|
daily_limit: props.dailyLimit,
|
||||||
},
|
},
|
||||||
}}/>
|
}}/>
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
# macOS 设置代理教程
|
|
||||||
本教程详细指导您在 iPhone 和 iPad 上配置代理服务器的完整步骤。
|
|
||||||
# 开始前的准备
|
|
||||||
在开始配置前,请确保您已获得以下信息:
|
|
||||||
- **代理服务器地址**(如:proxy.example.com 或 192.168.1.100)
|
|
||||||
- **端口号**(如:8080、8888)
|
|
||||||
- 如需认证:**用户名和密码**
|
|
||||||
- 企业网络可能需要的 **自动配置脚本 URL**
|
|
||||||
|
|
||||||
## 📱 Wi-Fi 网络代理设置(主要方式)
|
|
||||||
|
|
||||||
### 第一步:进入网络设置
|
|
||||||
1. 打开 **"设置"** 应用
|
|
||||||
2. 点击 **"无线局域网"**(Wi-Fi)
|
|
||||||
3. 确保已连接到需要设置代理的 Wi-Fi 网络
|
|
||||||
4. 点击当前 Wi-Fi 名称右侧的 **蓝色信息图标 (ⓘ)**
|
|
||||||
|
|
||||||
### 第二步:找到代理配置选项
|
|
||||||
1. 在 Wi-Fi 详细信息页面中向下滑动
|
|
||||||
2. 找到 **"配置代理"** 选项(通常在页面底部)
|
|
||||||
3. 默认状态为 **"关闭"**
|
|
||||||
|
|
||||||
### 第三步:选择代理模式
|
|
||||||
点击"配置代理",您会看到三种选项:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# 模式选择说明
|
|
||||||
关闭: 不使用代理
|
|
||||||
自动: 使用自动配置脚本(.pac文件)
|
|
||||||
手动: 手动输入代理服务器信息
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# 浏览器设置代理教程
|
|
||||||
|
|
||||||
打开IE浏览器,选择“设置”,点击“Internet选项”,在弹出的“局域网LAN设置”中,代理服务器的复选框打上勾,并填写从神龙HTTP获取的ip地址及端口号,点击确定,刷新浏览器,浏览器的IP就改变了。
|
|
||||||
|
|
||||||
1、打开IE浏览器,选择“设置”;
|
|
||||||
|
|
||||||
2、点击“Internet选项”;
|
|
||||||
|
|
||||||
3、弹出“Internet选项”弹窗,选择连接—局域网设置;
|
|
||||||
|
|
||||||
4、在弹出的“局域网LAN设置”中,代理服务器的复选框打上勾,并填写从神龙HTTP代理获取的ip地址及端口。点击确定,即设置成功了。
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# HTTP 代理实名认证操作
|
|
||||||
|
|
||||||
说明实名认证流程、所需材料与常见问题。
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
# 使用 Socks5 代理上网
|
|
||||||
|
|
||||||
Firefox 提供了多种代理设置方式,支持 HTTP/HTTPS 和 SOCKS5 协议。本教程将详细介绍各种配置方法。
|
|
||||||
|
|
||||||
## 配置方法概览
|
|
||||||
|
|
||||||
| 方法 | 适用场景 | 复杂度 | 持久性 |
|
|
||||||
|------|----------|--------|--------|
|
|
||||||
| 手动设置 | 单用户临时使用 | 低 | 重启浏览器失效 |
|
|
||||||
| 自动代理(PAC) | 企业环境 | 中 | 永久 |
|
|
||||||
| 扩展程序 | 灵活切换规则 | 高 | 永久 |
|
|
||||||
| 系统级代理 | 全局代理 | 低 | 系统重启失效 |
|
|
||||||
|
|
||||||
## 手动代理设置
|
|
||||||
|
|
||||||
### 打开代理设置页面
|
|
||||||
|
|
||||||
1. **点击菜单按钮**(右上角三横线)
|
|
||||||
2. 选择 **设置**(或直接访问 `about:preferences`)
|
|
||||||
3. 滚动到页面底部
|
|
||||||
4. 点击 **网络设置** → **设置**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// 快速访问代理设置的地址
|
|
||||||
about:preferences#general
|
|
||||||
// 或直接
|
|
||||||
about:preferences
|
|
||||||
SOCKS5代理IP是一种网络代理协议,用于在计算机之间传递数据,同时提供匿名性和安全性。SOCKS5协议可以让应用程序通过一个中间服务器,使用另一个主机上的网络资源,实现代理访问,从而隐藏客户端的真实IP地址。
|
|
||||||
与其他代理协议不同,SOCKS5代理协议可以支持不同的身份验证方式,包括用户名/密码身份验证和GSSAPI身份验证。SOCKS5协议还可以提供UDP和TCP流量代理,使得应用程序可以在不改变代码的情况下使用代理IP。
|
|
||||||
SOCKS5代理IP的主要优点包括:
|
|
||||||
1、更高的安全性:SOCKS5协议支持加密传输,可以确保数据在传输过程中的安全性。
|
|
||||||
2、更高的匿名性:SOCKS5协议支持UDP和TCP流量代理,并且支持不同的身份验证方式,可以帮助用户隐藏真实IP地址,保护隐私。
|
|
||||||
3、更高的灵活性:SOCKS5代理可以让应用程序无需修改代码即可使用代理IP,同时支持多种身份验证方式和传输协议,提高了灵活性和可用性。
|
|
||||||
总之,SOCKS5代理IP是一种高安全性和高匿名性的代理协议,可以帮助用户隐藏真实IP地址并保护隐私,同时提高灵活性和可用性。
|
|
||||||
|
|
||||||
SOCKS5代理的流程如下:
|
|
||||||
1、用户向代理服务器发送连接请求。
|
|
||||||
2、代理服务器收到连接请求后,根据用户请求的目标地址和端口,向目标服务器发起连接请求。
|
|
||||||
3、目标服务器收到代理服务器的连接请求后,回复确认连接。
|
|
||||||
4、代理服务器收到目标服务器的确认连接后,将数据转发给目标服务器。
|
|
||||||
5、目标服务器接收到数据后,将数据返回给代理服务器。
|
|
||||||
6、代理服务器收到数据后,将数据转发给用户。
|
|
||||||
在这个过程中,SOCKS5代理服务器起到了中间传输的作用,将用户的请求转发给目标服务器,并将目标服务器的响应返回给用户。由于传输过程中使用的是代理服务器的IP地址和端口号,所以用户的真实IP地址和端口号得到了隐藏。
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
# Windows10 电脑设置代理教程
|
|
||||||
|
|
||||||
1、点击桌面右下角网络连接图标,选择“网络和Internet设置”选项
|
|
||||||
|
|
||||||
2、点击“代理”,将“使用代理服务器”设置为开,输入地址和端口后保存
|
|
||||||
|
|
||||||
3、浏览器打开百度,输入IP地址查询,若查询结果和设置的代理IP一致,则代理设置成功S
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
# Windows7 电脑设置代理教程
|
|
||||||
|
|
||||||
## 🚀 30秒快速设置法
|
|
||||||
|
|
||||||
### 第一步:打开设置面板
|
|
||||||
1. 按 `Win` + `R` 打开运行框
|
|
||||||
2. 输入 `inetcpl.cpl`
|
|
||||||
3. 按回车
|
|
||||||
|
|
||||||
### 第二步:配置代理
|
|
||||||
1. 点击顶部 **"连接"** 标签
|
|
||||||
2. 点击右下角 **"局域网设置"** 按钮
|
|
||||||
3. **勾选** "为LAN使用代理服务器"
|
|
||||||
4. 填写代理信息:
|
|
||||||
- **地址**:`proxy.example.com` 或 `192.168.1.100`
|
|
||||||
- **端口**:`8080` 或 `3128`
|
|
||||||
5. 点击两次 **"确定"** 保存
|
|
||||||
|
|
||||||
### 第三步:测试验证
|
|
||||||
打开浏览器访问任意网站,检查是否正常
|
|
||||||
|
|
||||||
## 🌐 浏览器专用代理方案
|
|
||||||
|
|
||||||
### Chrome / Edge / Firefox 推荐方案
|
|
||||||
```javascript
|
|
||||||
// 最佳实践:使用代理管理扩展
|
|
||||||
// 1. 安装 SwitchyOmega 或 Proxy SwitchySharp
|
|
||||||
// 2. 配置代理服务器信息
|
|
||||||
// 3. 一键切换,不影响系统设置
|
|
||||||
|
|
||||||
// 配置示例
|
|
||||||
const proxyConfig = {
|
|
||||||
type: 'HTTP', // 或 HTTPS / SOCKS5
|
|
||||||
host: 'proxy.company.com',
|
|
||||||
port: 8080,
|
|
||||||
bypassList: ['localhost', '*.internal'] // 例外列表
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user