使用 Nginx+UWSGI 对 Twitter 媒体资源进行反代

2016-06-10 00:43:14 +08:00
 ZGLHHH

本项目用于解决 pbs.twimg.com 在国内被屏蔽的问题。

本项目基于 tiangolo/uwsgi-nginx-dockerYUX-IO/uwsgi-nginx-flask-docker-for-sinaimg ,对此表示感谢!


项目仓库:

Github :HuanMeng0/uwsgi-nginx-flask-docker-for-twimg

DockerHub(如果 Github 上的仓库内容有更新,会自动进行构建更新 images):huanmeng/uwsgi-nginx-flask-docker-for-twimg


用法

https://pbs.twimg.com/media/CkfhtlvWYAIgdMb.jpg:orig(此处 orig 表示让服务器返回原图)

改成: https://APP_URL/pbs.twimg.com/media/CkfhtlvWYAIgdMb.jpg:orig

(不知为何不能带 https://或 http://)


License

Apache License2.0


Demo && 立刻使用: ihuanmeng.com/twimgrp/

例子: https://ihuanmeng.com/twimgrp/pbs.twimg.com/media/CkfhtlvWYAIgdMb.jpg:orig


原文:ihuanmeng.com/use-nginx-uwsgi-to-proxy-twimg/

2819 次点击
所在节点    分享创造
25 条回复
SoloCompany
2016-06-10 01:20:47 +08:00
twimg.com 好像一直(或大多数)都没有被墙的吧

curl https://pbs.twimg.com/media/CkfhtlvWYAIgdMb.jpg:orig -v > /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 104.244.43.135...
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to pbs.twimg.com (104.244.43.135) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.twimg.com
* Server certificate: DigiCert SHA2 High Assurance Server CA
* Server certificate: DigiCert High Assurance EV Root CA
> GET /media/CkfhtlvWYAIgdMb.jpg:orig HTTP/1.1
> Host: pbs.twimg.com
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 09 Jun 2016 17:23:15 GMT
< Server: Apache
< access-control-allow-origin: *
< cache-control: max-age=604800, must-revalidate
< content-md5: ppYsQlEEfam1trtSfEdeww==
< content-type: image/jpeg
< last-modified: Thu, 09 Jun 2016 07:32:44 GMT
< x-connection-hash: 03d3d915f1e9daee68c580e95d73d63a
< x-response-time: 18
< Content-Length: 35924
< Accept-Ranges: bytes
< Via: 1.1 varnish
< Age: 34261
< X-Served-By: cache-tw-lax1-cr1-17-TWLAX1
< X-Cache: HIT
< Expires: Fri, 24 Jun 2016 17:23:15 GMT
< X-Content-Type-Options: nosniff
<
0 35924 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0{ [7451 bytes data]
100 35924 100 35924 0 0 9606 0 0:00:03 0:00:03 --:--:-- 9605
* Connection #0 to host pbs.twimg.com left intact
ZGLHHH
2016-06-10 01:22:26 +08:00
YUX
2016-06-10 03:54:43 +08:00
fcicq
2016-06-10 07:41:16 +08:00
nginx rewrite 直接能搞定的事为什么要 flask? 又慢又阻塞, wsgi 下只能发送 full response, 不是楼主想象的边收边发.
9hills
2016-06-10 09:25:57 +08:00
E-M-T!
kendisk
2016-06-10 09:58:53 +08:00
nginx 反代一切
just1
2016-06-10 11:15:24 +08:00
没事干嘛扯 flask , nginx 就够的事情
ZGLHHH
2016-06-10 11:55:55 +08:00
@fcicq
@just1 抱歉,我之前并不知道 FLASK 的缺点,这个项目的灵感来自 @YUX 的反代新浪图床,所以我就直接 fork 代码来改了。
notgod
2016-06-10 14:35:09 +08:00
@ZGLHHH
还是太年轻啊
https://ihuanmeng.com/twimgrp/pbs.twimg.com/media/CkfhtlvWYAIgdMb.jpg:orig

这种格式会触发网址关键词屏蔽的
因为包含了 *.twimg.com 的域名
有人访问 不出 1 周就阵亡了

所有涉及 不可描述 的 使用加密 或者混淆下
lslqtz
2016-06-10 17:19:02 +08:00
@notgod 不是 https 么 你发的链接
ZGLHHH
2016-06-10 18:28:24 +08:00
@notgod HTTPS 不会被探测到吧?
notgod
2016-06-10 18:51:42 +08:00
@lslqtz
@ZGLHHH

可以肯定的告诉你们

估计你们对 Qiang 的理解 还在 08 年的阶段
现在的墙已经不是当初的墙了
SSL 的探测从被动模式已经升级至主动模式

没有秘密的 尤其是请求的是网址 还不是内容
ZGLHHH
2016-06-10 19:25:20 +08:00
@notgod 那么应该怎么做?
notgod
2016-06-10 19:30:59 +08:00
所有涉及 不可描述 的 使用加密 或者混淆下
比如
https://ihuanmeng.com/twimgrp/pbs.twimg.com/media/CkfhtlvWYAIgdMb.jpg:orig
使用一个算法 加密字符串
https://ihuanmeng.com/twimgrp/dawedwaudhweiaduiawd/media/CkfhtlvWYAIgdMb.jpg:orig
然后 nginx 端 截取 dawedwaudhweiaduiawd 解密算法 解密为 pbs.twimg.com
向后端请求


这样就不会触发了
反代保留 不可描述 的原域名地址 就是找死
一个人无问题 一天 10IP 就 kill 了

我见过
前脚注册了一个域名
使用 proxy php 的程序
访问下 https://sss/face book. com
后脚域名就被 Qiang 了
lslqtz
2016-06-10 19:45:19 +08:00
@notgod 是的,但是,内容和访问的 url 是有加密的。
t123yh
2016-06-10 20:03:31 +08:00
顺便问一个问题,这种获取上游能不能用 HTTP Proxy 或者 socks5 Proxy 啊,这样可以把站点架设在境内,由服务器走代理
ZGLHHH
2016-06-10 20:14:58 +08:00
@t123yh
应该可以,因为用到了 requests.get ,我认为会遵循系统的网络设置。
或者,可以试试在服务器设置 hosts 。
ZGLHHH
2016-06-10 20:15:37 +08:00
@notgod 我建立了一个 antiblock 分支用于解决你所说的问题: https://github.com/HuanMeng0/uwsgi-nginx-flask-docker-for-twimg/tree/antiblock
czb
2016-06-11 10:51:11 +08:00
HTTPS 下墙应该只能拿到 HOST ,具体目录是拿不到的
lslqtz
2016-06-11 20:53:09 +08:00
@czb 是的, IE6 及以下连 Host 都拿不到。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/284705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX