![单个程序的端口路由/DNS](https://linux22.com/image/38922/%E5%8D%95%E4%B8%AA%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%AB%AF%E5%8F%A3%E8%B7%AF%E7%94%B1%2FDNS.png)
背景
Flickr 已关闭其 http api,仅保留 https api。我最喜欢的上传器(在 wine 下运行的官方 Flickr Uploadr 版本 2.5)不再维护,所以这个更改破坏了它。
我当前的解决方案是设置一个反向代理服务器来转换http://www.flickr.com
并https://www.flickr.com
修复我的 DNS,以便www.flickr.com
将流量转发到该代理服务器。
这是可行的,但显然我不希望所有的 flickr 流量都流向代理,而只希望来自上传者的流量。
问题
我可以仅将从此应用程序定向到 www.flickr.com 的流量发送到我的反向代理吗?
补充问题
有没有更简单的方法来实现这一目标?例如,无需代理服务器http://www.flickr.com
直接转发。https://www.flickr.com
解决方案
尴尬的是,该应用程序本身有一个代理设置,所以我所要做的就是将其设置为指向我的代理服务器。另外,下面 Giles 的回答显示了如何为单个 Unix 应用程序和所有 Wine 应用程序设置代理。
答案1
仅 DNS 无法帮助您:它可以将您的客户端指向另一台计算机,但该计算机必须在端口 80 上提供预期的 Flickr 内容。
您需要的是一个通过 HTTP 接收 HTTP 请求并使用 HTTPS 重新发出请求的代理。将您的上传者指向此代理;代理是发出 DNS 请求的人,而不是客户端,因此您根本不需要摆弄 DNS。
阿帕奇与mod_proxy
和mod_ssl
是一个简单的,如果重量级的,这样的代理。我现在想不出现成的轻量级解决方案。修改Python的SimpleHTTPServer
可能是另一种解决方案。
要将 Wine 应用程序指向代理,请参阅葡萄酒常见问题解答§7.18“如何配置代理?”。有两种解决方案:
通常的unix解决方案:设置环境变量
http_proxy
,例如(如果您的代理正在侦听端口8070):export http_proxy=http://localhost:8070/ wine 'c:/Program Files/Flickr Uploader/Flickr Uploader.exe'
Wine 方法:设置
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] ProxyEnable
注册表项(语法请参阅 Wine FAQ)。
答案2
在您的盒子上创建一个 SSH 端口转发,并将上传器指向本地端口。
ssh -L 80:www.flickr.com:443 user@localhost
将上传者指向localhost:80
,端口转发会将流量铲到www.flickr.com:443