大概是3月份吧，我突然想回顾一下23年一年读过的书，以及记录24年我正在读书。我个人也不太会写前端，所以就用ChatGPT给我生成了一个简单、朴素的书架页面 https://simonmy.com/books.html 制作这个页面的过程很快，但是图书封面的问题让我很头大。如果是直接配置豆瓣的地址，大概率是被拦截的。我自己从豆瓣抓下来，然后传图床再加到页面也很麻烦，所就有了这个简单的小工具。原理实用一张简单的流程图说清楚所有的逻辑利用Cache快速检查之前是否做过图片转存加速如果命中了Cache，直接读取R2中的图片，返回用户如果没有命中Cache 3.1 利用豆瓣API把图片抓取下来，上传到R2 3.2 更新Cache，以便于后续命中 3.3 读取R2中的图片，返回用户准备工作一个Cloudflare账号，没有的自己注册一个托管在 Cloudflare的域名 (建议有，不强制)关键步骤创建存储这一步没什么要注意的，只要名字符合规范就好。创建R2的时候，可以选择亚太区，速度理论上会快一些创建R2 创建KV创建Worker这一步是最重要的一步，先到自己账户的 Worker&Pages 页面并创建一个Worke。创建的时候注意不是Pages，Worker的名字自己看着来，使用默认的Hello World模板部署即可。创建成功之后不要急着贴代码，按照以下步骤来可以少走弯路~第一步：绑定R2和KV回到自己账户的 Worker&Pages 页面，进入刚才自己创建的Worker，选择 Setting - Variables。找到 KV Namespace Bindings 添加变量名为 DOUBAN_KV, 对应的值选择上一步你创建的KV的名字找到R2 Bucket Bindings 添加变量名为 DOUBAN_R2, 对应的值选择上一步你创建的R2的名字[scode type="blue"]这里Cloudflare前端显示有问题，下划线是显示不出来的，贴上去保存即可[/scode]第二步：贴代码回到自己账户的 Worker&Pages 页面，进入刚才自己创建的Worker， 进入右上角的 Edit Code(编辑代码)将下面的代码粘贴到Worker内的worker.js，部署即可。const DOUBAN_API_HOST = 'frodo.douban.com'; const DOUBAN_API_KEY = '0ac44ae016490db2204ce0a042db2916'; const requestOptions = { headers: { // host: DOUBAN_API_HOST, authorization: '', 'user-agent': 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 15_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.16(0x18001023) NetType/WIFI Language/zh_CN', referer: 'https://servicewechat.com/wx2f9b06c1de1ccfca/84/page-frame.html', 'cache-control': 'no-store' }, cf: { cacheTtl: 0, scrapeShield: false, cacheEverything: false } }; async function fetchSubject({type, id }) { const url = `https://${DOUBAN_API_HOST}/api/v2/${type}/${id}`; const params = new URLSearchParams({ apiKey: DOUBAN_API_KEY }); return fetch(url + '?' + params.toString(), requestOptions); } async function fetchCover({ type, id, cache, bucket }) { const fileCacheKey = 'file_' + type + '_' + id; const fileBucketKey = 'cover/' + type + '/' + id + '.jpg' const fileCacheValue = await cache.get(fileCacheKey); if(fileCacheValue) { const object = await bucket.get(fileBucketKey) if (object === null) { return new Response('Object Not Found', { status: 404 }); } const headers = new Headers(); object.writeHttpMetadata(headers); headers.set('etag', object.httpEtag); return new Response(object.body, { headers, }); } else { const urlCacheKey = 'url_' + type + '_' + id; const urlCacheValue = await cache.get(urlCacheKey); let coverUrl = ''; if(urlCacheValue) { coverUrl = urlCacheValue } else { const subject = await (await fetchSubject({ type, id })).json(); coverUrl = type === 'celebrity' ? subject.cover_img.url : subject.cover_url; await cache.put(urlCacheKey, coverUrl) } const response = await fetch(coverUrl, requestOptions) const bodySize = parseInt(response.headers.get('Content-Length'), 10) let originalResponse = response.clone(); if(response.ok && bodySize > 0) { await bucket.put(fileBucketKey, response.body); await cache.put(fileCacheKey, fileBucketKey); console.log(fileCacheKey, fileBucketKey); } return new Response(originalResponse.body, { headers: { 'cache-control': '2592000' } }); } } // Export a default object containing event handlers export default { async fetch(request, env, ctx) { const reg = /^\/(movie|book|music|game|celebrity)\/(\d+)\.jpg$/i; const url = new URL(request.url); const path = url.pathname const match = path.match(reg) if (!match) { return new Response('') } const[_, type, id] = match const cache = env.DOUBAN_KV const bucket = env.DOUBAN_R2 return await fetchCover({ type, id, cache, bucket }) }, }; 绑定域名（可选）回到自己账户的 Worker&Pages 页面，进入刚才自己创建的Worker，选择 Setting - Triggers, 自行添加即可。用法及限制用法假设我们想要的是《置身事内》这本书的封面，Worker域名以 demo.account.workers.dev 为例。先到豆瓣找到这本书的地址 https://book.douban.com/subject/35546622/获取到书的ID为 35546622那么图书封面的地址就是https://demo.account.workers.dev/book/35546622.jpg[scode type="blue"]如果是自定义域名，那就用自定义域名。如果没有自定义域名，那就用官方给的worker域名[/scode]限制1.由于使用Cloudflare的网络，图片的加载速度在某些地区可能得不到保证 2.Cloudflare Function免费版每日限制100,000个请求（即加载图片的总次数不能超过100,000次）如超过可能需要选择购买Cloudflare Function的付费套餐写在最后避免有人抬杠，这里也专门标注一下。代码仅仅为了解决豆瓣图片这个小问题，确实存在一些缺陷和不足，一是js我不太专业。二是我知道并发时可能多次下载图片导致ABA问题，没必要解决。
Google 这些天开放了Gemini Pro的 API Token申请通道， 并且免费开放给开发者使用。根据谷歌官网价格显示，免费版本每秒最多可支持60次API访问，足以满足个人学习使用。Gemini API Token申请地址Google AI Studio: https://makersuite.google.com/app/apikey Gemini首页: https://ai.google.dev 具体的申请步骤这里不敖述，如果大家不太会，可以留言，专门开个文章来写。部署由于Google PaLM API仅允许美国使用，我国境内是无法直接使用的，因此解决方案与OpenAI类似，使用Vercel Edge进行反向代理。开源地址：antergone/palm-proxy点击 Vercel 按钮即可一键部署用法(样例)Google原生API：curl \ -H 'Content-Type: application/json' \ -d '{ "prompt": { "text": "Write a story about a magic backpack"} }' \ "https://generativelanguage.googleapis.com/v1beta3/models/text-bison-001:generateText?key={YOUR_KEY}"替换Vercel域名或自定义域名:curl \ -H 'Content-Type: application/json' \ -d '{ "prompt": { "text": "Write a story about a magic backpack"} }' \ "https://{YOUR_DOMAIN}/v1beta3/models/text-bison-001:generateText?key={YOUR_KEY}"参考文档Google Gemini API Doc: https://ai.google.dev/docs Google Gemini API Price: https://ai.google.dev/pricing Vercel Edge Functions API: https://vercel.com/docs/functions/edge-functions/edge-functions-api OpenAI Proxy: https://github.com/egoist/openai-proxy
1.综述1.1.总览新疆的旅游环线包括多个路线版本，人们常说去北疆看景色，去南疆看人文。本人去新疆是9月底，正值喀纳斯的秋景最好看的时间，因此本文根据我的行程总结介绍北疆环线的相关旅游攻略。北疆大环线，一般指天山往北的喀纳斯环线+伊犁环线。核心看点是喀纳斯景区的秋景以及伊犁环线的草原风景。因此，9月底是喀纳斯景区赏秋的好时间，而6-8月则是伊犁草原最好看的时候（9月仍可以在那拉提的空中草原欣赏到极致的草原景色）。主要景点包括：S21沙漠公路、五彩滩（彩色丘陵与落日）、喀纳斯（包括喀纳斯景区、白哈巴、禾木村）、赛里木湖、独库公路（北段及中段）、巴音布鲁克（九曲十八湾赏落日）、那拉提景区、乌鲁木齐城市景点等。另外，有些景点因为时间原因和个人喜好做了舍弃，如可可托海、天山天池、魔鬼城、夏塔古道、独山子大峡谷。另外还有一些小众景点，如北疆白沙湖、八卦城都可以根据自己的喜好进行选择。后续的内容中将会对核心看点和主要景点做详细的讲解。整个北疆大环线路程约2800KM，可以选择跟团游，也可以选择飞乌鲁木齐后落地租车自驾。本文攻略则是按自驾自由行来描述的。整个环线自驾下来约10天左右，大家可以根据各自时间做景点取舍及相应的调整。1.2.特别注意注意：伊犁环线中的独库公路，因为有固定的开放时间，六月至十月中旬开放，中间也会因为天气原因临时关闭。所以如果想玩伊犁环线的话，最好选择在独库公路开放的时间去新建北疆旅游。具体原因下文中会有介绍。1.3.准备工作身份证、驾照、现金零钱（以防有时候手机没网络）、充气枕头（长途坐飞机睡觉使用）。这些其实不是重点，重点是下面两个：衣物，新疆昼夜温差大，9月下旬去真正体会到了一年四季，因此夏装、春秋装、甚至冬装都视情况带上。我9月下旬带了毛衣和厚羽绒服，遇到下雪天还是冷。无人机，新疆北疆的景色真的很好看，而从高空俯视有更加震撼的美感。因为之前没有玩过无人机，怕租无人机不会用或搞坏掉，所以这次去新疆没有准备无人机。结果手机拍出来的照片和别人用无人机拍出来的照片差距很大。所以有条件真的建议准备一台无人机。如果之前没有的话，淘宝或一些城市实体店就可以租，听在景区使用无人机的大哥说，使用上手会很简单。1.4.总体行程以下是我的行程路线。天数日期行程类别备注day09月22日南京-乌鲁木齐地窝堡机场飞机✈️ 租车取车租车?提前联系遇到，机场送车 宿乌鲁木齐住宿? day19月23日乌鲁木齐-布尔津-五彩滩开车?509km，6h30min，123元高速费 S21沙漠公路-阿乌高速(古尔班通古特沙漠)五彩滩日落景点⛰门票45元，彩色丘陵，落日 宿布尔津住宿?也可以提前赶赶路住贾登峪，第二天留有充足时间玩喀纳斯 day29月24日布尔津-喀纳斯开车?120km，2h30min喀纳斯景区景点⛰如果第二天抢不到去禾木的门票，则可以通过从喀纳斯景区渠道白哈巴，则买二进票。一进门票+区间车230元，二进门票+区间车270元。 优先爬观鱼台，再逛三湾(卧龙湾、月亮湾、神仙湾) 宿贾登峪住宿? day39月25日贾登峪-禾木特殊14点往禾木门票站停车场满了，就可以自驾进禾木景区了 （如果没放行自驾，则当日行程取消，去白哈巴）禾木游玩景点⛰白桦林、美丽峰、观景台、看日落、喂鹰 选择1：宿禾木住宿?如果禾木村住宿不贵，或可以订到，可以住禾木村，第二天早上看落日。否则连夜返回布尔津 选择2：禾木-布尔津开车?154km，3h，33元高速费 选择2：宿布尔津住宿? day49月26日布尔津-奎屯开车?460km，5h30min，131元高速费乌尔禾胡杨林景点⛰可选，不去南疆看胡杨林则可以看下这边的胡杨林，本人实际没有进去 魔鬼城景点⛰可选，如果看过青甘大环线的魔鬼城，这边可以跳过 宿奎屯住宿? day59月27日奎屯-巴音布鲁克镇开车?256km，6h，独库公路北段+中段，出发前在独山子加好油。不要赶时间，好好欣赏路上的风景乔尔玛服务区服务区?独库公路的中心点，服务区，有烈士纪念馆，几年因修独库公路牺牲的168名官兵战士 独山子大峡谷景点⛰ 巴音布鲁克大草原景点⛰门票+区间车140元，观光车20元夏天20点日落，需要赶在18.30分前到达游客服务中心。九曲十八弯看落日 宿巴音布鲁克镇住宿? day69月28日巴音布鲁克镇-那拉提景区东门开车?65km，1h30min，再走一次独库公路中段。那拉提自驾景点⛰自驾票200元每人，提早在小程序预约自驾订票从东门延河谷草原自驾至游客中心、中途可以自驾盘龙谷道。而后从游客中心处往南走空中草原路线 宿那拉提镇 day79月29日那拉提镇-乔尔玛-唐布拉草原-尼勒克县-伊宁市开车?这一天是可选路线，走这条路线可以欣赏下不亚于那拉提景区草原的唐布拉草原。当天也可以根据自己的喜好，选择去琼库什台大草原因为那拉提自驾票，两天都可以进景区，可以从那拉提西门进景区，走河谷草原去往那拉提东门出，然后走一段独库公路北段，到达乔尔玛，再走S315国道去往伊宁市。400km，7h，32元高速费仙女湖景点⛰ 唐布拉草原-百里画廊景点⛰ 宿伊宁市住宿?可以选择住霍城县，第二天去赛里木湖可以省一个小时 day89月30日伊宁市-赛里木湖开车?142km，2h，54元高速费果子沟大桥景点⛰可以导航至果子沟观景台度假山庄处，从远处观看果子沟大桥。不特意导航的话，去赛里木湖的路上，会从果子沟大桥上经过。 赛里木湖自驾景点⛰环湖约93km 赛里木湖-精河县开车?136km，1h40min，45元高速费 宿精河县住宿?可以选择住精河、奎屯、石河子，甚至直奔乌鲁木齐 day910月1日精河县-乌鲁木齐开车?419km，4h30min，161元高速费 乌鲁木齐城市游景点⛰晚上可以去国际大巴扎吃东西可以去和田二街买干果可以去红山干果市场买玉器可以去华凌国际珠宝玉器城了解地理只是可以去新疆自然博物馆了解历史可以去自治区博物馆宿乌鲁木齐住宿? day1010月2日乌鲁木齐城市游景点⛰同上乌鲁木齐地窝堡-南京禄口飞机✈️ 1.5.费用情况由于是落地租车自驾，整个队伍是两队情侣，两家人分摊租车、邮费、过路费，换着开车，整体费用算下来，每家（2人）花费1.3w元。其中机票来回5000元，租车+邮费+过路费约2500元，景区门票约1000元，住宿花费2000元，其他就是吃喝买特产了。住宿的话，喀纳斯一带由于有夕阳旅行团，人较多，所以住宿较紧张也较贵，所以最好提前预定（旺季时贾登峪、禾木村一晚酒店会1500-3000一晚）。伊犁环线的酒店都不贵，200多能住不错的酒店。2.交通篇2.1.飞机买各自城市到乌鲁木齐的机票。1000左右（不含燃油机建）基本是最便宜的价格了。2.2.落地租车自驾2.2.1.租车平台选择可以从携程、飞猪等平台租车。也可以使用自营的神州租车或一嗨租车。一般自营租车更放心，但同样车型的价格也更贵。而携程和飞猪则是平台方，上面入驻有乌鲁木齐当地的私人租车公司，只要买好保险，一般没什么问题。本人在海南、西宁、乌鲁木齐都是走的平台租车，都没遇到问题或坑。2.2.2.车型选择一般自驾的话，新疆环线路程较长，一般需要2-3个司机换着开，可以两对夫妻结对或4人同行。这种情况的话，可以选择5做SUV，空间大，行李多也放得下，后座舒展的开，坐车不至于太累。可以选择坦克300，哈佛大狗4驱2.0T或其他四驱车。我当时选择的是哈佛大狗1.5T的两驱车，结果当喀纳斯阿勒泰地区下雪管控时，两驱车体现出了很大的劣势。封路后放行也优先是四驱车先走。当然，下雪封路属于特殊情况，一般情况下两驱也够，但条件允许的话，还是上四驱吧。9月底看新闻天气，阿勒泰喀纳斯地区有好几次大雪封路的情况。价格参考（飞猪、携程）：淡季200元每天，国庆旺季400~500元每天。（不包括服务费）如果6人同行，可以选择7座商务车，这个没有了解过不做介绍。7座以上的话走不了独库公路，就不建议了。2.2.3.保险如果是在携程或飞猪这种平台租车，保险这块，一般基础服务保险都会默认选择，而推荐升级一个档次的保险服务。主要体现在车损保障方面，默认的是只保超过1500元的车损的部分，升级一档则1500元以下的车损也包含免赔付。新疆地区路上经常会碰到牛羊，很容易剐蹭车身，这个不是车技好可以避免的，可以买个安心。第三档的保险服务，主要体现在轮胎、玻璃的损失，这两个一般不会出问题，大家可以根据自身经济条件选择。所以选车时，也优先选取车龄较新的车2.2.4.其他服务租车的话，一般也问清楚，车龄，车子是否带手机支架，倒车影像，如果带小孩出游，部分车行也会配婴儿座椅等。大家按需选择询问。2.2.5.取车取车时，一定要观察车况。拿手机拍摄车的四周是否有明显划痕，车胎是否有较严重的破损，也拍下油表及公里数。在还车时可以有个对比。如果购买了上述升级过的险种，还车时出现一般小划痕都不会有问题的。2.2.6.其他特别要注意的是，新疆高速部分路段，路两侧没有护栏，不要因为景色好看而停车拍照。高速停车很危险，如果被交警抓到，会扣9分罚200块。笔者在S21公路某路段因误停车，而被交警逮到，因此特意提醒下大家。3.景点-喀纳斯环线篇北疆的喀纳斯环线的最重要的景点则是喀纳斯景区和禾木村，而按照环线的顺序，景点包括：天山天池、S21沙漠公路(阿乌高速)、可可托海、五彩滩、喀纳斯景区、禾木村、白哈巴、魔鬼城。由于时间原因和个人喜好，天山天池、可可托海、魔鬼城没有去，下图红色箭头指向景点大致位置，蓝色箭头则是自驾方向路线。接下来，我则按照自驾路线顺序，分别介绍下景点介绍及攻略。3.1.S21公路推荐指数：⭐⭐⭐⭐适合游玩时间：6小时S21公路其实叫阿乌高速，联通阿勒泰到乌鲁木齐的高速公路，且是贯穿古尔班通古特沙漠的一条沙漠公路。落地新疆后，往喀纳斯方向去时，走S21公路，可以感受到西北方的地广人稀，独特的戈壁沙漠景观，随着地势的起伏，也可以看到一望无际的广阔天地。随着公路渐渐靠近城市，也可以看到路边种植的棉花地和遍地的瓜果。需要注意的是，这是一条高速公路，千万不要路边停车拍照！！！高速停车被逮到，将扣9分罚200！！！3.2.五彩滩推荐指数：⭐⭐⭐适合游玩时间：0.5-1小时五彩滩景区，靠近布尔津，门票45元。五彩滩，主要是彩色雅丹地貌，以下是百度百科介绍。景区简介五彩滩位于布尔津县城以北约24公里处，是前往哈巴河县与喀纳斯的必经之路。它毗邻碧波荡漾的额尔齐斯河，与对岸葱郁青翠的河谷风光遥相辉映，可谓“一河隔两岸，自有两重天”。河岸岩层抗风化能力强弱不一，轮廓便会参差不齐，而岩石含有矿物质的不同，又幻化出种种异彩，因此得名“五彩滩”。五彩滩(26张)五彩滩风景区前有大型的风力发电网站。北岸山势起伏、颜色多变，其是由激猛的流河侵蚀切割以及狂风侵蚀作用而共同形成。由于河岸岩层间抗风化能力的强弱程度不一而形成了参差不齐的轮廓，这里的岩石颜色多变，且在落日时分的阳光照射下，岩石的色彩以红色为主，间以绿、紫、黄、白、黑及过渡色彩，色彩斑斓。每当刮风的时候，沟壑里、岩石下，到处都会发出长短不一、高低不同的怪叫声。整个景区不大，从门口到观景台不过100米，游玩时间0.5-1小时。可以选择在落日前进入景区，欣赏落日。网上对五彩滩夕阳景观的描述：夕阳斜照下，满滩参差不齐、奇形怪状的岩石，鲜艳的红色、黄色，神秘的蓝色和紫色，纯洁的白色，还有赭石等过渡色彩，色彩斑斓，互相映衬；光影斑驳，深浅明暗，交互融合，绚丽鲜亮，娇艳妩媚。为什么指给了3星呢，这个景区很依赖天气，夕阳落山时，最好也不要有云朵遮挡。景区本身不大，如果单想看五彩地貌，可以去西北青甘大环线的张掖五彩丹霞景区，那边的面积几乎是五彩滩的100倍。去过之后感觉票价只值20元?。3.3.喀纳斯景区推荐指数：⭐⭐⭐⭐⭐适合游玩时间：1.5-2天到了喀纳斯环线的重点了，也是喀纳斯环线的精华所在。喀纳斯湖中传闻有水怪，我反正是没看到，但是不妨碍整个景区景色优美，下图是喀纳斯景区的大致示意图。3.3.1.门票整个喀纳斯地区，其实可以分为两个部分，一个是喀纳斯景区，一个是禾木村。本大段内容先讲喀纳斯景区，禾木村在下一个章节单独讲。喀纳斯景区的旺季是5.1-10.15，淡季是10.16-4.30。淡季、旺季的门票价格不同，且淡季是可以直接自驾进景区的。本文主要以旺季的时间视角介绍。旺季门票的话，一进套票包含门票+区间车230元，二进套票包含门票+区间车270元。门票本身淡季80元，旺季160元，可以两次进园，而一进和二进套票，主要是区间车的次数区别。这边建议买二进套票（可以连续两天游玩），整个喀纳斯景区很大，尽量预留1.5-2天感受自然美景。3.3.2.关键地点、交通路线、住宿选择几个关键景点：观鱼台、三湾、湖边观景台、喀纳斯老村、喀纳斯新村、白哈巴，后续会有介绍。几个关键地点：布尔津，离喀纳斯景区较近的县城，童话小城。布尔津到贾登峪是走S232国道，主要是山路，需要2小时左右。沿路的风景也十分好看。贾登峪，离喀纳斯进去大门最近的镇子，有立体停车场、餐饮及住宿。自驾车停到贾登峪立体停车场后，直接坐免费公交车前往喀纳斯门票站，约5分钟。喀纳斯门票站，喀纳斯景区大门，从这边坐区间车前往换乘中心，途中会经过三湾，一般不停靠，区间车需乘1个小时。换乘中心，喀纳斯景区内的一个交通枢纽，可以在这分别排不同的队去往三湾、新村、老村、湖边观景台、观鱼台和白哈巴。可以在这购买去观鱼台、白哈巴的区间车票，去白哈巴的边防证也可以在这边办理。住宿的话，可以选择布尔津、贾登峪、喀纳斯新村、老村、白哈巴。相对靠近景区的贾登峪、新老村，旺季需要提前预约住宿（最好提前一周以上），且价格较贵。3.3.2.观鱼台推荐指数：⭐⭐⭐⭐⭐适合游玩时间：2-4小时观鱼台是在喀纳斯湖旁的一个小山上修建观景台，视野很好，可以俯瞰整个喀纳斯湖。到喀纳斯换乘中心后，优先排队坐车游玩观鱼台。去往观鱼台的区间车票需要单独购买，可以在网上提前购买，也可以在换乘中心现场购买，价格约20元。从换乘中心乘车到观鱼台半山腰的观景平台约20分钟，途中会走盘山公路，可以从车上俯瞰喀纳斯新村。到观鱼台半山观景台后，需要再爬1068级台阶最终登到观鱼台。如果嫌怕台阶太累，也可以选择在换乘中心或观鱼台半山腰处骑马登顶。具体价格有点忘了，在换乘中心估计200左右，在观鱼台半山腰估计100左右。我们是花了很大力气爬上去后，下山时才看到骑马的选项。由于正常渠道登上观鱼台，是需要爬台阶的，由于阿勒泰地区气候变化较快，如果遇到下雪天气，台阶上有积雪结冰，则观鱼台不开放。9月底运气不好的人，来了喀纳斯，两天都爬不了观鱼台。此时，天气稍微放晴点，还是可以选择骑马上山的。受限于天气和拍摄技术，没有拍出很完美的照片，但观鱼台仍是最推荐最优先的去处。3.3.3.三湾推荐指数：⭐⭐⭐⭐适合游玩时间：2-4小时三湾，分别是卧龙湾、月亮湾和神仙湾，在喀纳斯门票站和换乘中心之间区间车必经之路上。一般可以选择玩完观景台，准备出景区乘坐区间车去往喀纳斯门票站时，顺路游玩拍照。也可以选择直接从换乘中心徒步至三湾。返程区间车会在三湾分别停留。三湾徒步。很适合拍照及徒步，从换乘中心到卧龙湾有山间湖边栈道以供徒步，神仙湾到月亮湾，月亮湾到卧龙湾分别间隔2km，徒步的话分别都需要1个小时左右。这边最推荐的是月亮湾和卧龙湾之间的徒步路线，因为这条路线几乎是贴着水边修的栈道，极其适合欣赏拍照。（我当时是走从神仙湾走到月亮湾，几乎都是山间树林路，稍逊色于月亮湾-卧龙湾的徒步路线，第二天再次进园想要尝试月亮湾-卧龙湾的徒步路线时，雪下得很大，就没有下去走了，实属遗憾）下面是三湾介绍及网图。神仙湾因为每到清晨和傍晚都是云雾缭绕，时隐时现的美景让人浮想联翩，恍如仙境。甚至有老年人传说那是仙人修行的地方，故取名“神仙湾”。月亮湾的形成一是因为湖水在这里成“S”形流淌，酷似月牙而得名。二是传说嫦娥在这里偷食贡品，差点误了升天时间，匆忙奔月而得名。月亮湾甚至还有当年嫦娥奔月留下的大脚印。卧龙湾名字的由来是此处河湾出现一个酷似霸王龙的小岛而被取名“卧龙湾”，当然也有传说是龙族少年深爱着附近的一个哈萨克美女，后来美女不知去了哪里，龙族少年在这里苦等万年，最终化作小岛，成就卧龙湾。下面是我的实拍照片。当时我玩的时候，正值飘雪，最后的卧龙湾的照片直接没有下车在区间车上的拍的。3.3.4.白哈巴推荐指数：⭐⭐⭐适合游玩时间：2-4小时白哈巴是西北第一村，靠近与哈萨克斯坦的边境线上，从地图上看，已经在中国雄鸡的鸡尾巴上了。村子里面保留着木头做的原始屋子，村子周边的秋景十分好看，是禾木村的替换选项。当然，如果时间不够，禾木村门票和住宿又约到了的情况下，还是优先去禾木村。路线：到达白哈巴有两种路线，一种是从布尔津走S232、S219自驾前往，不经过喀纳斯景区。另一种则是在喀纳斯景区内，换乘中心站坐区间车前往白哈巴村。当然，淡季是可以从喀纳斯景区内自驾前往的，在公众号中预约即可。费用：门票+往返区间车的费用，需要在喀纳斯换乘中心站现场购买，约75元。然后往白哈巴村方向排队等车，班车时间一般是10、12、14、16、18点，但是旺季人满即开。需要留意，最晚回喀纳斯的车是18点，不要错过。区间车一趟大约需要1个小时，可以观看沿途风景。边防证：可以在乌鲁木齐提前办理，在喀纳斯门票站和换乘中心也都可以办理，先办理才能买去白哈巴的门票。边防证办理窗口就在白哈巴售票窗口隔壁。游玩看点：白哈巴村木屋原始村落，村中有免费公交穿行，做到底站是白哈巴-西北第一村的石碑。从这边可以俯瞰整个白哈巴村。村中也有往山上去的徒步落线，个人没有选择爬山徒步。另外，距离村子11公里处，有另一个景点，即“中哈边境大峡谷”，听说峡谷景色优美，如果自驾过去的建议去看看，村子中也有私人车辆拉客前往，一般一个人50块来回。我当时时间原因没有去看。总结：整个村子，其实商业化比较明显了，几乎全是商店和民宿，同行的小伙伴觉得来白哈巴特别不值。我也不知道是不是天气原因，或者我们没有到一个很适合观景的地方，导致拍出来的照片都感觉一般般。所以时间够，可以来一趟，有禾木村，还是优先取禾木村吧。'3.3.5.其他喀纳斯景区内，除了上面3个景点外，还有新村、老村、喀纳斯湖边观景码头。在码头可以选择乘坐轮船到湖面上逛一圈，游船票120元。但是听说不太值当，就是把人带到湖心溜一圈再回来，很普通，因此我没有选择去。另外喀纳斯湖边也有徒步路线，由于时间原因，我也没选择去。大家可以根据自己喜好进行选择。3.4.禾木村推荐指数：⭐⭐⭐⭐适合游玩时间：6-24小时禾木村是最能体现喀纳斯秋景优美的地方，尤其是9月下旬，树叶变黄的时节去特别好看。禾木村和白哈巴村类似，村子全是木屋，较为原始的村落。但是这边的景色更受人青睐。由于当时没有抢到票，没有预约到住宿，再加上那几天遇到大雪禾木村道路封闭，所以没有亲身经历。以下是一张网图，给大家感受下。由于没有亲身经历，所以这一部分的攻略没有特别详尽，但是在去新疆之前也尝试做过事前攻略，因此分享下我所知道的。禾木村主要看点是，白桦林、美丽峰、观景台、看日落、喂鹰、星空、看晨雾等。3.4.1.门票+住宿要去禾木村的话，旺季最好需要提前预约门票，一般很多人会选择在禾木村住一晚，看夜里的星空和第二天的晨雾，然后第二天再出来。因此禾木村住宿也需要提前预约。禾木村的住宿条件一般，都是木屋，但是费用极高，旺季时达到1500-3000元，大家根据自己的经济条件选择是否住在禾木村。其实禾木村，秋天赏秋，冬天滑雪，这两个时间住宿费用都挺高的。再回到这个大致路线图，在从布尔津到贾登峪的路上，有一个岔路，可以自驾前往禾木村门票站停车场，需要把车停在停车场后购买门票（52元）+区间车（50元）前往禾木村。区间车发车时间是8.30-20.00，从禾木村返程到门票站的最晚的班次是20点，过了时间就需要住在禾木村内了。3.4.2.主要玩法根据上面的信息，旺季其实可以有以下几种玩法。玩法一，当天进出。适用于不在禾木村居住的玩法，当天起早，赶到禾木门票站停车，然后坐区间车进到禾木村，路上约1个多小时。当天在禾木村有选择的玩几个景点后，20点赶在最后一班区间车回到门票站。玩法二，住宿一晚。适用于在禾木村民宿居住的玩法，进到禾木村后，当天有充足的时间去往核心景点，然后夜晚看星空，第二天早上看晨雾，然后离开禾木村。玩法三，露营。适用于不住禾木村民宿，但又想看星空和晨雾，就可以选择露营的方式。在禾木村门票站乘坐区间车，然后人肉背上行李和露营装备，前往禾木村。然后在观景台附近可以支帐篷露营了。需要注意的时注意夜间温度，注意保暖。玩法四，隐藏玩法。适用于不在禾木村住宿的玩法。当旺季人多时，禾木门票站停车场，约下午2点左右，如果车停满了，此时交警会放行让游客自驾前往禾木村。如果提前买了区间车票，也会退还区间车的费用。自驾前往禾木村后，玩到半夜，再自驾离开禾木村，返回布尔津。3.5.其他喀纳斯环线，还有天山天池、可可托海、魔鬼城等景点。天山天池，个人认为相对其他景点来说较为普通，听一东北大哥说，长白山天池比天山天池好看多了，因此我没有去。可可托海，被大家熟知是那一首歌《可可托海的牧羊人》，可可托海名字中带有海，实际上不是海，该地有很多矿产资源，最有名的是下面的三号矿坑，被誉为共和国的功勋矿、英雄矿。在新中国建设时期，为我们的国家提供了宝贵的稀有金属资源。为了去可可托海，需要从S11号公路绕远路过去，时间原因没有去。魔鬼城，在从布尔津到独山子的沿途，应该是和西北青甘大环线的大柴旦魔鬼城有些类似，因此我也没选择去。魔鬼城，是一种风蚀雅丹地貌，夜里刮风吹过该地形，发出呜呜呜如魔鬼的声音，因此得名。吐鲁番火焰山，能不去就不去，没啥玩的。4.景点-伊犁环线篇接下来，介绍伊犁环线的主要玩法。伊犁环线的核心是独库公路，那拉提景区和赛里木湖，这些景点正好环绕伊犁哈萨克自治州一周，因此得名。蓝色是行车路线，红色标记的是景点大致位置，黄色表示的是独库公路的分段名称。下图是按顺时针来玩的，游玩顺序，其实受限于独库公路是否封路。即便是6-10月，独库公路仍然会因为大雪或其他极端天气而封路。因此前一天到达奎屯、独山子区时，如果当天天气好，就优先走一下独库公路，顺时针游玩。以防把独库放在最后一天，遇到封路，则需要绕远路返回乌鲁木齐。本人真实经历：9月27日先走独库公路，10月1日我从赛里木湖返回乌鲁木齐时，独库公路就因为大雪封路了，如果逆时针游玩，则无法体验到独库公路的美景了，很庆幸当时的选择。​ 4.1.独库公路推荐指数：⭐⭐⭐⭐⭐适合游玩时间：6-8小时独（独山子）库（库车）公路，从独山子，贯穿天山，到达天山南部的库车市的公路。是一条让人一天经历四季的极致景观大道。独库公路，由于是穿过北天山与南天山，天山海拔高处，一年中多个月份都会下雪，因此是一条时令公路，每年的6月份开放，10月中封闭。这段期间如果因为极端天气，也会不定期封路。每年开放时，会在独山子独库公路大本营举办开通仪式。独库公路从1974年到1983年修筑了将近十年，期间有168名筑路官兵因雪崩或隧道塔防牺牲，乔尔玛革命烈士陵园记录了烈士的事迹。独库公路全长561公里，主要分为3段，北段是从独山子到那拉提，约228公里，驾车需要约4.5小时。中段是从那拉提到巴音布鲁克，约65公里，驾车需要约1.5小时。南段是从巴音布鲁克到库车市。约268公里，驾车需要约5小时。​ 独库公路，为双向两车道，有很多盘山公路，各种U型弯，我只开了北段和中段，感觉比一生中自驾过的弯道还要多。由于地形复杂，因此只放行7座以下自驾车辆，所以伊犁环线的夕阳红旅行团较少。整个独库公路会经过多种地形地貌，南北天山上海拔高处会见到雪山，南北天山间海拔较低出会见到草原及河谷，一路景色令人陶醉。走独库公路的一天，不要认为是在赶路，一定要多留意路边的景色。而我们当天由于需要赶巴音布鲁克的落日，错过好多驻足欣赏的景色。4.2.巴音布鲁克推荐指数：⭐⭐⭐适合游玩时间：4小时4.2.1.介绍巴音布鲁克草原，位于独库公路中段，电影《飞驰人生》中出现的场景，但显示并非电影中的汽车赛道，巴音布鲁克最有名的还是夕阳映照在草原的九曲十八弯上，角度好可以同时看到10个太阳。网图：4.2.2.攻略夏季的新疆太阳落山一般在8点左右，巴音布鲁克景区，需要在18.30分到达游客中心（晚一分钟都会关门），门票+区间车费用为140元。然后乘坐1个小时的区间车进入景区内部，然后到达最后一站。最后一站到九曲十八弯观景台还有约2公里的徒步路程，可以选择观光车前往，票价20元，在最后一站购买。因此，晚于18.30进园区，就赶不上看落日了。一个小时的区间车，沿途可以看到整个草原的风景。由于我们去的时候已经是9月底了，草都泛黄了，6-8月去应该是比较好看的。然后区间车还会经过多个小景点，其中有一个是天鹅的栖息地，由于当时我们已经是区间车最后一班了，司机建议我们不要下车直接取最后一站，赶在太阳下山前看九曲十八弯夕阳。真想要看到10个太阳也取决了几个因素：一是天气，太阳需要上班；二是太阳落山处的天边不要有云朵，不然太阳余辉会被遮挡；三是太阳落山的位置，由于不同时节太阳落山的位置不同，很可能太阳不是在九曲十八弯的中轴线上落山。比如我在9月底去的，太阳基本贴着九曲十八弯的左侧落山的，大部分看到的和拍到的只有3-4个太阳。4.2.3.住宿直接住巴音布鲁克镇，由于没有夕阳旅行团，房源充足，即便是节假日，都可以低价订到房间。4.2.4.后记如果一天的时间早，可以早入园去到中途的小景点。我们去的时候赶得末班车，几乎2个半小时的时候都是在区间车和观光车上，看到的是泛黄的草原和不是纯正的10个太阳，感觉140+20的票价不太值得。大家可以根据自己的时间进行取舍。（来都来了，还是去一下吧）4.3.那拉提景区推荐指数：⭐⭐⭐⭐⭐适合游玩时间：1-2天关键的来了，那拉提景区是我个人觉得体验极好的一个景区。4.3.1.门票上图中有写门票和各条路线区间车的价格。另外还可以选择自驾进入景区。我个人推荐自驾的方式游玩那拉提。自驾门票是原来是300一人（注意，不是一车，车上多少人就买几张票），每天开放300个自驾名额，因此需要提前预约。但是23年9月中下旬降价了，降到200元/人了，相对于单独买门票+各区间车，还是很划算的。购票后，可以48小时内多次入景区。自驾预约是在“智游那拉提”小程序中，需要填写司机驾驶证（司机需要3年驾龄）、车的行驶证、乘客的身份信息并线上支付，可提前一周预约。景区现场自驾入场时，会检查车中人数。4.3.2.自驾游玩路线上图中介绍了几个游玩路线。核心的自驾路线是河谷草原、空中草原和盘龙谷道。4.3.2.1.河谷草原推荐指数：⭐⭐⭐⭐适合游玩时间：2小时河谷草原是沿着河岸，东西走向的一条自驾路线，联通景区的两个大门，西门和东门。河谷草原北侧是河谷，南侧是群山，两侧平坦处的草原上，能见到牛、羊、马。中间会有国际赛马场，代格拉斯处也可以骑马，但是不建议在这边进行骑马体验。河谷草原由于地势较低，我们去的时候也有些偏黄，6-8月的青绿色草原应该是极好看的。在见多了喀纳斯、独库公路的极致美景后，河谷草原的景色稍有单调，但可以把他作为去往盘龙谷道的必经之路，以及从西门到东门的快速通路来看，他的地位也不低了。一般游客非自驾是从西门的游客中心进入园区的，自驾可以选择从东门进入。而空中草原路线是靠近西门游客中心的，为了不在一天往返河谷草原路线，且前一天是刚玩过巴音布鲁克草原的话，可以从巴音布鲁克草原穿过独库公路中段，导航定位到那拉提景区东门，然后从东门自驾进入，沿着河谷草原前往游客中心、去到空中草原。4.3.2.2.盘龙谷道推荐指数：⭐⭐⭐⭐⭐适合游玩时间：2小时盘龙谷道是一条盘山公路，入口是在河谷草原的“依提跟塞”处上山，地图上可见自驾和区间车是两条路线，自驾的盘龙谷道线路更短，但是更险，由于我们去的时候这条线路封闭，实际走的和区间车一条线路。会经过名为时来运转、蛟龙出海、卧龙岗的几个关键停留点。尤其是蛟龙出海，是一个靠近山顶的大的观景台，向北可以俯瞰整个河谷草原和远程的那拉提镇，向南可以远眺较为原始的树林及群山。4.3.2.3.空中草原推荐指数：⭐⭐⭐⭐⭐适合游玩时间：4-6小时接下来，是那拉提景区中重点中的重点，从景区西门游客中心触发，沿正南触发，经过多个盘山公路，爬升一定高度后，会进入到一片位于半山腰山麓的广阔的草原。空中草原因此得名。整个空中草原路线单程21公里，但刚翻过山看到这篇草原时，着实让人感到震撼，近处的大片草原和远处山脚下的青葱树林，再到更远处的雪山，犹如瑞士森林风景，犹如置身电影场景中，犹如童话世界，犹如3A大作中的游戏场景，像塞尔达荒野之息。网红桥，是溪流从两棵树间流过，两树之间溪流之上架了一座小木桥，这边拍照很出片。空中草原路线自驾到游牧人家，然后再沿游牧人家左侧的道路，继续行驶500左右，来到一个停车场。然后停车后继续往南不幸100米，就会看到这个网红桥。抱小羊。网红桥附近，有牧民会提供刚出生的小羊，可以抱小羊拍照。10元就可以租小羊，小羊约20斤重，刚出生20天。骑马。网红桥附近的牧民也提供骑马的项目，80元/人/小时。在这边骑马，可以往山上骑，在马背上可以俯瞰整个空中草原，也可以骑马进入高处的森林，很梦幻的体验。就像电影魔戒和很多游戏中的场景。之前体验过骑骆驼，感觉骆驼一颠一颠的，骑着感觉有随时掉下来的感觉，而且夹屁股，而骑马的体验好多了，很稳，很酷。在新疆很多地方，看到骑马赶羊的人，就感觉他们骑马的样子很帅很高大，自己骑马时真的感觉体验极佳。牧民刚把人扶上马后，直接把缰绳交给我，我一开始很慌，怕控制不住马，但是由于马被训练的很温顺，一些坚定的动作或命令就可以操作马的动作了。用双脚从外向内夹一下马肚子，马就可以从停止到前进了。多夹几次马肚子，可以使马加速；手拿缰绳向后拉，可以使马减速和停下来；手拿缰绳朝左或朝右拉动，可以控制马的前进方向。雪莲谷。从游牧人家到雪莲谷，无法自驾了，需要单独购买区间车前往，大约需要60元/人。我当时骑完马太阳已经落山了，雪莲谷没有时间去，以下是网图。有人说坑有人说好看，大家可以单独搜下攻略自行判断下。4.3.3.住宿直接住那拉提镇。感觉房源充足，即便是节假日，都可以低价订到房间。4.4.唐布拉草原推荐指数：⭐⭐⭐适合游玩时间：2小时唐布拉草原，是一个免费的开放的草原，网上说景色不亚于那拉提的草原。唐布拉草原位于那拉提北边，有一条景观路线横贯唐布拉，即S315国道，西起独库公路乔尔玛，东到尼勒克县，依次有仙女湖、百里画廊、孟克特古道等景点。这边有一个小红书上关于唐布拉草原的一个很详细的攻略，可以参考下：小红书-唐布拉草原攻略如果前一天住在那拉提镇，下一站是赛里木湖，与其一天都在赶路，不如试试我的路线。依次定位：那拉提镇-那拉提景区东门-乔尔玛-尼勒克县-伊宁市（离赛里木湖较近的一个城市，伊犁哈萨克自治州的中心城市）。从那拉提镇到那拉提东门，可以从那拉提景区走河谷草原走，避开大马路，再次体验下河谷草原的风景。另外，从那拉提东门到乔尔玛，也可以重新走下独库公路北段的一段路。其实唐布拉草原的精华是乔尔玛到风口（一个地标地名，不是啥景点）之间，也可以选择从风口那边的岔路口往南进到伊墩高速，然后前往伊宁市。仙女湖。由于可恶的iphone信号不好，从乔尔玛出发，去往百里画廊的时候，手机信号接收不到定位信息，导致错过了仙女湖。有人说仙女湖值得一去，我没有体验过不太了解。百里画廊。百里画廊其实就是S315国道中一段精华段，沿路如画绵延百里，因此得名。唐布拉草原，还是因为时节的原因，9月下旬草泛黄，这时候看唐布拉草原感觉一般。因此我给的推荐指数是3星，也可能6-8月份会好看点。如果同样是9月下旬去，感觉可以选其他景点游玩。4.5.赛里木湖推荐指数：⭐⭐⭐⭐适合游玩时间：4-8小时4.5.1.路线及果子沟大桥赛里木湖，位于伊犁环线的西部，从伊宁出发，到达赛里木湖东门，约2小时的路程。在快靠近赛里木湖的地方，名为果子沟的地方，有一个雄伟的，跨越峡谷的大桥。如果不特别定位，则会直接从大桥上经过去往赛里木湖。如果想从远处拍照大桥，可以定位果子沟观景台度假山庄，然后有一个这一路有4个停车拍照点，间隔不远。由于我没有提前做攻略，错过了这个远处拍照果子沟大桥的机会，具体机位和拍照效果可以参考：小红书-果子沟大桥拍照机位。以下为网图。4.5.2.大西洋最后一滴眼泪赛里木湖有“大西洋最后一滴眼泪”的说法，由于北天山和南天山的阻隔，印度洋、太阳洋的气流吹不到赛里木湖，而来此大西洋的气流从西部吹到赛里木湖处就停止，因此得到该称号。4.5.3.门票及主要观景点门票为70元、自驾75元。购买自驾票不需要单独买门票。自驾游之前150，后来打折降价了。赛里木湖环湖约92公里。北门到东门，东门到南门感觉没啥玩的，就在车上拍拍湖面就行。核心出片点在湖的西侧路段。松树头，往南有一个徒步上山的路线。走到高处，可以俯瞰整个赛里木湖，翻过山，也可以远眺果子沟大桥。网红S湾，网上有一些比较出片的机位，走惯了独库公路和那拉提盘龙谷道我以为有很多S湾，结果就一个弯道，我很自然的就错过了?。灯塔，就一个灯塔。。。金花紫卉，6-7月去是一片花海，我去的时候（9月底）啥都没有。克勒涌珠，一年四季泉水用处，大概率在这能看到天鹅，其实从天鹅乐水到灯塔路段，都可能会看到天鹅。4.5.5.冬天的赛里木湖网图：4.5.4.餐饮赛里木湖景区内，有一系列特色菜，是高白鲑为材料制作。原来的赛里木湖没有鱼，后来引进了来自俄罗斯的高白鲑才有的鱼。因此环湖有很多高白鲑餐厅可以品尝。我点的鱼籽炒饭、炸鱼胸肉，还不错，比较酥脆，见下图（吃到一半才想起来拍照。。）。还有鱼冻、鱼肉饺子等多种高白鲑域制作菜肴。4.5.5.住宿赛里木湖环湖有很多星空民宿，如果不住景区，可以住附近的城市。附近有精河县、伊宁市、霍城县、霍尔果斯等可以选择，可以根据环线自驾方向选择。这几个城镇房源充足，即便是节假日，都可以低价订到房间。4.5.6.后记撒贝宁名言。赛里木湖游玩，真的很看天气，天气好绝美。天气阴一点，没有太阳，就感觉是很普通一湖。。。。我去的那天就是阴天，就走马观花的溜了一圈。结果第二天就是大晴天，还有明星去拍戏（23年10月1日），很气。天气好的时候的网图，不知道加没加滤镜：下面是我在阴天拍的照片。4.6.其他伊犁环线，还有一些其他景点，如琼库什台和夏塔古道国家森林公园，但是由于这两个景点，不是真的在环线上，都需要单独前往游玩后返回，且距离较远，时间关系，我没有去。有兴趣的可以各自搜下攻略前往。5.景点-乌鲁木齐篇5.1.国际大巴扎巴扎，维吾尔语就是集市的意思，里面有售卖各种商品，如玉石、干果、冰箱贴、当地服饰等，还有各种小吃。大巴扎有少数民族特色建筑，晚上有夜市开放，价格普遍偏贵，如果想吃小吃建议去和田二街。我本来冲着夜市，晚上来的国际大巴扎，结果夜市价格劝退，还是应该白天去，标志建筑白天拍照会更好看。去国际大巴扎，建议不要开车或打车，路面上超级堵。建议坐地铁前往。5.2.新疆自然博物馆对新疆的自然地理感兴趣的话，可以来自然博物馆。免费入园，最好预约下。博物馆一般周一不开放，节假日除外。5.3.新疆维吾尔自治区博物馆省级博物馆。最著名的是五号干尸馆。干尸图就不放了，有兴趣私聊获取。来参观的人比较多，需要提前预约。博物馆一般周一不开放，节假日除外。5.4.红山干果市场如果想买特产干果，可以去红山干果市场。我在小红书上找的，就直接去的这里面推荐的店铺。我实际去的第二家，进店后老板疯狂给我们塞各种干果给我们品尝，能吃饱。。。当场买了也支持邮寄回家，邮费2元1斤。新疆不管买水果还是买干果，询问价格一般都是回复x元1公斤的，注意下度量衡转换。里面干果的质量很好，比x只松鼠、x品铺子里面的坚果要好。葡萄干很大颗，还有大红枣、西梅干、夏威夷果、核桃、牛肉、奶制品等。还有比较有特色的沙漠果，长得很奇怪，里面的果然有点像夏威夷果。5.5.华凌国际珠宝玉器城珠宝玉器市场，负一楼是原料，二楼是高端成品，价格都很贵，不敢问价，三楼相对便宜。找三楼的那种批发的店，里面有百元内能买到的玉器。5.6.和田二街一条小吃街，价格比较实惠，新疆的石榴跟头差不多大。5.7.楼兰秘烤一家网红店，建筑很有特色，主要是烤肉类。价格实惠，点了140，吃到撑（可能是之前逛干果市场，被干果吃饱了）。有两家店，我们去的迎宾路店，下午就有跳舞表演。6.后记大家都说看风景去北疆，看人文去南疆，我一直不知所以然。在自治区博物馆内，听导游解说说，历史上，北疆一般是游牧民族，没有固定居所，所以没有遗留下来什么人文城市，而南疆古代就有很多知名城市，喀什、楼兰、和田等，都在丝绸之路上。我在这里得到了答案。南疆除了人文外，也有很多景色优美的地方，胡杨林、白沙湖等，以后有机会将进行一次南疆环游。北疆之行，景色的确是天花板般的存在，虽然中途有很多变数和插曲（大雪封山滞留喀纳斯、草原泛黄、阴天赛里木湖），但玩下来仍觉得非常非常非常值得一玩。我很推荐大家也去看看新疆之美，因此做了本篇攻略，希望可以帮助到大家。本文转自：https://www.yuque.com/chenghao-0eusv/wykoox/xofka9zct8ho8b0u?singleDoc
使用阿里云函数计算反向代理OpenAI服务
本文的主要思路是使用阿里云的函数计算服务来代理 OpenAI 的 API 地址，配合自己的域名即可在境内实现访问。至于是不是永久免费，我不知道。但是每个人都有点免费额度，个人做技术探究应该是够用了。前期准备需要一个阿里云账号， 没有账号的可自行注册( 点击此处注册 )需要一个自己注册的域名， 没有的可以注册 ( 点击注册域名 )创建代理服务1. 登录并开通函数计算服务登录地址：https://fcnext.console.aliyun.com/overview2. 通过模板创建Nginx应用这是整个过程中最重要的一步！首先在函数计算管理的应用面板，找到创建应用。选择 通过模板创建应用， 在搜索框输入 Nginx ，找到对应模板 立即创建填写一些服务关键信息。 这里要注意一下几个点选择 直接部署区域选择可以访问OpenAI的区域，例如：日本、美国、新加坡等函数名、角色等信息不要修改3 Nginx配置修改在函数及服务 面板中，找到刚创建的服务，点击进入 Nginx 选择函数代码，并进行编辑，仅修改 nginx.conf 即可， 代码全文如下:# nginx -c /code/nginx.conf -g 'daemon off;' events { worker_connections 1024; } http { server { error_log /dev/stderr; access_log /dev/stdout; gzip on; gzip_min_length 1k; gzip_comp_level 2; gzip_types text/html text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png image/svg+xml; gzip_vary on; gzip_disable "MSIE [1-6]\."; include /etc/nginx/mime.types; add_header Access-Control-Allow-Origin *; proxy_set_header Host api.openai.com; proxy_http_version 1.1; proxy_set_header Host $host; listen 9000; location ~* ^\/v1\/((engines\/.+\/)?(?:chat\/completions|completions|edits|moderations|answers|embeddings))$ { proxy_pass https://api.openai.com; proxy_set_header Connection ''; proxy_read_timeout 8m; proxy_ignore_headers Cache-Control; client_body_buffer_size 4m; proxy_ssl_server_name on; proxy_ssl_session_reuse off; } location /v1 { proxy_pass https://api.openai.com; proxy_ssl_server_name on; proxy_ssl_session_reuse off; } } }别忘了部署代码4 域名绑定由于阿里云提供的默认公网访问地址是不能进行函数服务的，我们需要配置自己的域名。通过函数计算面板，找到域名管理页面，并进入添加自定义域名注意以下标出的几个重要信息域名输入后，先去解析 CNAME，如果没有解析，最终是无法提交的。 这一步不会做，自己去搜索引擎学习路由配置路径如图使用 /*服务名称： 即为刚才创建的服务函数名: nginx版本: LATEST强烈建议配置HTTPS如果你已经有了，可以上传。如果没有，直接使用免费的HTTPS申请教程: 点击学习详细的配置文档：https://help.aliyun.com/zh/fc/user-guide/configure-a-custom-domain-name其他操作Nginx服务资源调整(非必须)由于模板考虑到的是通用性，所以Nginx的资源申请的比较大。对于反向代理Open AI服务来说，就是大材小用、资源浪费了，我们还是能省则省。从函数计算面板，找到服务及函数，找到Nginx服务，点击函数名进入将Nginx调整为：0.1核, 128MB即可， 其他参数不要去修改不要忘记保存写在最后之前我也是使用Cloudflare Worker 反代 Open AI的API，今天突然用不成了。此文仅抛砖引玉，用于个人技术研究。
前面分享了自建的 Jrebel License Server，这一篇就来讲讲是如何搭建起来的。顺带记录一下如何去搞一个自建的Licence Server。为了赶上技术潮流，积极体验一下Serverless(其实就是穷，买不起服务器)， 将服务放在了阿里云的函数计算FC服务内。恰好很久没搞逆向技术了，抽时间试了试水，结合开源相关文章，就搞了个注册机。本文内容仅供技术研究，请支持正版!插件激活的 奥秘其实这个插件的Licence Server原理比较简单，需要提供以下5个HTTP接口用于客户端激活，还需要1个PKCS8​私钥用于报文签名，签名算法使用：RSASSA-PKCS1-V1_5-SIGN​​/jrebel/validate-connection​​/agent/leases/1​​/jrebel/leases/1​​/jrebel/leases​​/agent/leases​上述源码的可以通过 https://simonmy.com/posts/%E9%98%BF%E9%87%8C%E4%BA%91%E5%87%BD%E6%95%B0%E8%AE%A1%E7%AE%97fc%E9%83%A8%E7%BD%B2jrebel-licence-server.html 进行留言获取。证书这里就公开了，自己在搜索引擎搜索即可。搜索关键字: ​H2ulzLlh7E0=​使用阿里云函数计算FC部署在登录阿里云平台，并开通函数计算服务: https://fcnext.console.aliyun.com/overview在最上方切换到期望的Region， 这里推荐 中国香港​， 后续绑定自定义域名，可以无需备案。构建Licence Server代码并按照命名规范压缩创建一个服务，命名自定义即可，日志不做要求创建一个函数，命名自定义即可，注意创建时下图红框标注位置的参数​高级配置中，vCPU选择0.15核就够用了，内存选择 256MB即可触发器相关配置，使用默认就好上传代码文件，创建函数即可。添加一个自定义域名。打开函数计算高级功能内的域名管理，填写好域名和路由配置，注意要先去自己的域名DNS解析供应商进行CNAME解析(图中红线部分)​​创建成功后就可以使用自定义域名进行访问了其他有关插件安装和激活的文章移步：https://simonmy.com/posts/%E8%87%AA%E5%BB%BAjrebel-licence-server%E5%88%86%E4%BA%AB.html‍‍‍
最近开发调试，本地频繁重启。由于项目笨重，启动一次基本上就需要 3 -5 分钟。针对此类问题，急需要要给能帮助热部署的插件，此时此刻就就想起了Jrebel​。以IDEA为例 - 安装插件在插件市场输入关键字 Jrebel​进行搜索。并按照提示进行重启 IDEA!​​‍激活插件打开IDEA，进入JRebel的配置，直接点击 active now​ 链接进入到激活界面在激活窗口中，我们需要填入license​的地址和邮箱，其中邮箱随便填写。 license​的地址为：https://jrebel.simonmy.com/{UUID} ，其中{UUID}​ 可以通过 在线获取UUID 去生成一个填入license中。例如： https://jrebel.simonmy.com/15242afc-fea0-472c-a1df-de8e69d2c973​填写完成后，勾选同意agreement​，最后点击 Activate JRebel​​​看到如下样例，就是激活成功了，大家就可以愉快的使用了​​此Licence Server是在线服务，可以长期在线使用。‍‍
背景近期很多朋友都来问我，Mackw和RARBG关闭之后我都去哪里下载资源？针对视频需求来说，其实绝大部分国内的视频网站都是有会员的。只有极少数的情况，我会去资源站下载视频。针对软件需求来说，我本身是一个程序员，绝大部分时间都是在Mac环境下和IDE打交道，没有什么特别的诉求。下文中分享的都是我个人认为比较好用的资源站点视频类不太灵影视 https://www.2bt0.com/YTS.MX https://yts.mx/1337x https://1337x.to/TorrentGalaxy https://tgx.rs/软件类我常用的JetBrains系列都是公司的正版授权，其他的软件35%付费+60%开源+5%破解。Mac软件之家 https://www.macapp.so/Xclient https://xclient.info/电子书易书 https://search.yibook.org/Zlibrary Searcher https://zlib.knat.network/ 配合ipfs checker ( https://ipfs.github.io/public-gateway-checker/ )使用在线观影星视界 https://www.histar.tv/原一帆视频、iFun、多瑙 https://www.iyf.tv/
如果你还不知道什么是 Cloudflare Warp，建议先看看产品官网（https://1.1.1.1/ ）。中文简介也可以看看知乎的文章（https://zhuanlan.zhihu.com/p/352792129 ）[scode type="red"]本文不讨论 Warp 的实现原理，请读者不要过度解读。请合法合规的使用 Cloudflare Warp 的功能。[/scode]方法一：付费购买用土耳其区 Apple ID 直接付费，每月 10 try，每年 42 人民币。方法二：注册Cloudflare并加入ZeroTrust获得 ZeroTrust 版本的 Warp+，免费。参考连接：https://github.com/getsomecat/GetSomeCats/blob/Surge/注册Cloudflare并加入ZeroTrust教程.md方法三：分享连接和用脚本刷用普通的 iOS 1.1.1.1 App 分享链接邀请用户，获得一定容量奖励。直接打开网站，在线运行脚本：https://replit.com/@wdm1732418365/warp点击小三角开始 run 运行，然后输入你的 warp ID。Tips: 注意这里的warp ID不是你的account key，是设备ID手机客户端，点击右上角菜单图标，选择 Advanced，选择 Diagnostics，复制 ID电脑客户端，在客户端偏好设置，找到设备ID当然，也可以自己服务器或者本地跑脚本，脚本见附件。方法四：通过Warp+ Bot 生成机器人连接：https://t.me/generatewarpplusbot附件：刷流量脚本import urllib.request import json import datetime import random import string import time import os import sys os.system("title WARP-PLUS-CLOUDFLARE By ALIILAPRO") os.system('cls' if os.name == 'nt' else 'clear') print('Getting WARP+ Traffic on Github Actions') referrer = os.environ["DEVICEID"] def genString(stringLength): try: letters = string.ascii_letters + string.digits return ''.join(random.choice(letters) for i in range(stringLength)) except Exception as error: print(error) def digitString(stringLength): try: digit = string.digits return ''.join((random.choice(digit) for i in range(stringLength))) except Exception as error: print(error) url = f'https://api.cloudflareclient.com/v0a{digitString(3)}/reg' def run(): try: install_id = genString(22) body = {"key": "{}=".format(genString(43)), "install_id": install_id, "fcm_token": "{}:APA91b{}".format(install_id, genString(134)), "referrer": referrer, "warp_enabled": False, "tos": datetime.datetime.now().isoformat()[:-3] + "+02:00", "type": "Android", "locale": "es_ES"} data = json.dumps(body).encode('utf8') headers = {'Content-Type': 'application/json; charset=UTF-8', 'Host': 'api.cloudflareclient.com', 'Connection': 'Keep-Alive', 'Accept-Encoding': 'gzip', 'User-Agent': 'okhttp/3.12.1' } req = urllib.request.Request(url, data, headers) response = urllib.request.urlopen(req) status_code = response.getcode() return status_code except Exception as error: print(error) g = 0 b = 0 while True: result = run() if result == 200: g = g + 1 os.system('cls' if os.name == 'nt' else 'clear') print("") print("Getting WARP+ Traffic") print("") animation = ["[■□□□□□□□□□] 10%","[■■□□□□□□□□] 20%", "[■■■□□□□□□□] 30%", "[■■■■□□□□□□] 40%", "[■■■■■□□□□□] 50%", "[■■■■■■□□□□] 60%", "[■■■■■■■□□□] 70%", "[■■■■■■■■□□] 80%", "[■■■■■■■■■□] 90%", "[■■■■■■■■■■] 100%"] for i in range(len(animation)): time.sleep(0.5) sys.stdout.write("\r[+] Preparing... " + animation[i % len(animation)]) sys.stdout.flush() print(f"\n[-] WORK ON ID: {referrer}") print(f"[:)] {g} GB has been successfully added to your account.") print(f"[#] Total: {g} Good {b} Bad") print("[*] After 18 seconds, a new request will be sent.") time.sleep(18) else: b = b + 1 os.system('cls' if os.name == 'nt' else 'clear') print("") print("Getting WARP+ Traffic") print("") print("[:(] Error when connecting to server.") print(f"[#] Total: {g} Good {b} Bad")
如果你还不知道什么是 Cloudflare Warp，建议先看看产品官网（https://1.1.1.1/ ）。中文简介也可以看看知乎的文章（https://zhuanlan.zhihu.com/p/352792129 ）[scode type="red"]本文不讨论 Warp 的实现原理，请读者不要过度解读。请合法合规的使用 Cloudflare Warp 的功能。[/scode]首先我们先要介绍的是 Cloudflare Warp 的几种模式，再来说说为什么要使用 Proxy 模式。Cloudflare 提供的 6 种模式warp: 连接远端服务器, 并使用 tun 进行全局代理doh: 仅开启 DNS over HTTPS 功能warp+doh: 开启 Warp 和 DOH 功能dot: 仅开启 DNS over TLS 功能warp+dot: 开启 Warp 和 DOT 功能proxy：连接远端服务器，并在本地开启代理端口如果不理解什么是DOH和DOT，参考 Cloudflare 的介绍：https://www.cloudflare.com/zh-cn/learning/dns/dns-over-tls/ ，也可以自行在互联网搜索其他资料，例如：DOH：https://zh.wikipedia.org/wiki/DNS_over_HTTPSDOT：https://zh.wikipedia.org/wiki/DNS_over_TLS为什么要开启 Cloudflare Warp 的 Proxy 模式Cloudflare Warp 官方 Mac 客户端提供了除 proxy模式 之外的五种模式。带有warp的三种模式，都是依托于 TUN 实现的全局代理。doh和dot又只解决了 DNS 安全问题。如果此时需要依托于规则进行流量分配，以上 5 种模式都无法满足。如果不理解什么是TUN, 参考这篇文章：https://www.sobyte.net/post/2022-04/tun-mode/Cloudflare Warp提供了Proxy模式，可以不启用全局模式，且在本地监听一个socks5端口。如何开启 Cloudflare Warp 的 Proxy 模式0x1 安装 Cloudflare Warp 客户端官方网址：https://1.1.1.1/自行下载安装0x2 用户配置并退出客户端0x3 检查配置# 进入warp安装目录，寻找warp-cli cd "/Applications/Cloudflare\ WARP.app/Contents/Resources" # 检查用户, 如果没有返回正确的信息，重新会客户端绑定key ./warp-cli account # 返回样例： Account type: Limited Device ID: <Device ID> Public key: <Public Key> Account ID: <Account ID> License: <Your License Key> Role: Child Quota: 23837317999965990 Premium Data: 238373180000000000x4 切换模式# 设置工作模式为Proxy ./warp-cli set-mode proxy # 设置Socks5工作端口， 默认为4000，自行修改 ./warp-cli set-proxy-port 4000 # 确认配置文件 cd "/Library/Application\ Support/Cloudflare" cat settings.json0x5 连接与断连# 通过命令行进行连接 ./warp-cli connect # 查看连接状态 ./warp-cli status # 断开连接 ./warp-cli disconnect0x6 查看本地代理端口监听情况# 注意 这里一定要用sudo来执行 sudo lsof -i :4000
多年前因为一些原因，买了一个新加坡的低配服务器(ecs.t5-lc2m1.nano)。本来上面只是跑个 nginx 和脚本，近期需要弄点新东西，发现连 yum 都执行失败。问题表现这个问题困扰有一段时间了，具体表现为:# 执行yum命令被内核killed，例如： [root@iZt4nfkptd39wsnnpvwsvcZ ~]# yum update Killed分析既然进程是被 killed，那么直接找内核日志。# 执行命令，查看内核日志 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# dmesg | egrep -i -B100 'killed process' # 可看到下面的返回Out of memory字样 [ 2067.387457] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-0.slice/session-3.scope,task=yum,pid=106912,uid=0 [ 2067.387466] Out of memory: Killed process 106912 (yum) total-vm:704512kB, anon-rss:371016kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:1376kB oom_score_adj:0找到了问题原因，解决起来就比较简单。解决思路既然是内存问题，那么就粗暴的扩大内存。又由于这个机器没什么重要的东西，性能方面基本不考虑。所以可以考虑使用交换分区，并且调整系统对内存分配策略。但是交换分区并不是什么好办法，对磁盘压力比较大，很多命令都会假死卡住。只要你耐心等，还是能执行成功的，总比直接被 killed 要好点。方法一：扩大内存，调整内存分配策略# 注意：一下操作全部使用root用户 # 第一步，创建 1G 交换文件 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# mkdir -p /opt/swapfile/ [root@iZt4nfkptd39wsnnpvwsvcZ ~]# dd if=/dev/zero of=/opt/swapfile/1GB.swap bs=1024 count=1048576 # 第二步，保护交换文件，禁止其他用户修改 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# chown root:root /opt/swapfile/1GB.swap [root@iZt4nfkptd39wsnnpvwsvcZ ~]# chmod 0600 /opt/swapfile/1GB.swap # 第三步，将交换文件设置为交换分区 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# mkswap /opt/swapfile/1GB.swap # 第四步，临时启用交换分区 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# swapon /opt/swapfile/1GB.swap # 第五步，将交换写入分区表（持久化） [root@iZt4nfkptd39wsnnpvwsvcZ ~]# sudo cp /etc/fstab /etc/fstab.bak [root@iZt4nfkptd39wsnnpvwsvcZ ~]# echo '/opt/swapfile/1GB.swap none swap sw 0 0' | sudo tee -a /etc/fstab # 第六步，调整使用交换分区的策略和回收策略 # 宗旨：尽量使用内存，减少swap，同时，尽早flush到外存，早点释放内存给写cache使用。 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# sudo sysctl vm.swappiness=10 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf [root@iZt4nfkptd39wsnnpvwsvcZ ~]# sudo sysctl vm.vfs_cache_pressure=50 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# echo 'vm.vfs_cache_pressure=100' | sudo tee -a /etc/sysctl.conf # 第七步，调整系统内存分配策略 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# sudo sysctl vm.overcommit_memory =1 [root@iZt4nfkptd39wsnnpvwsvcZ ~]# echo 'vm.overcommit_memory =1' | sudo tee -a /etc/sysctl.conf方法二：钞能力，直接升级我平时很少用这个机器（说白了就是穷），花钱是不可能花钱的，所以不准备升级这个服务器