[分享] 使用 Ngrok 实现内网穿透
Ngrok 是什么
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。
网络架构如下图所示:
介绍和图片来自: http://www.oschina.net/p/ngrok
可以用来干什么
其中应用场景最多的是内网穿透, 把局域网内的一些服务暴露到公网.
例如支付对接的异步通知, 微信开发者模式测试等.
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。
网络架构如下图所示:
介绍和图片来自: http://www.oschina.net/p/ngrok
其中应用场景最多的是内网穿透, 把局域网内的一些服务暴露到公网.
例如支付对接的异步通知, 微信开发者模式测试等.
Ngrok 是一个内网穿透工具, 用来将内网的一些服务器暴露到公网上, 目前支持 HTTP 和 TCP 端口转发.
Ngrok 官方提供的服务器因为一些原因导致可用率不高, 但是他们开源了 1.x
版本的服务器端代码(目前最新是 1.7
), 这样就可以自己搭建了.
这个比较简单, 参考官方的文件就可以, 步骤无非就是: 拿到代码, 安装 go, 进行编译.
文档地址: https://github.com/inconshreveable/ngrok/blob/master/docs/DEVELOPMENT.md
编译完成后, 执行 ngrokd -h, 输出如下:
Usage of bin/ngrokd:
-domain="ngrok.com": Domain where the tunnels are hosted
-httpAddr=":80": Public address for HTTP connections, empty string to disable
-httpsAddr=":443": Public address listening for HTTPS connections, emptry string to disable
-log="stdout": Write log messages to this file. 'stdout' and 'none' have special meanings
-log-level="DEBUG": The level of messages to log. One of: DEBUG, INFO, WARNING, ERROR
-tlsCrt="": Path to a TLS certificate file
-tlsKey="": Path to a TLS key file
-tunnelAddr=":4443": Public address listening for ngrok client
参数比较简单, 指定域名, http 端口, 日志, ssl 证书, 隧道端口.
这里有个问题就是, 80, 443 已经让给 nginx 使用了, 虽然 ngrok 能指定到其它端口, 但是在客户端连接后:
一个是 https 识别错误, 一个是访问的时候加端口麻烦, 就算用 nginx 再次代理, 但是客户端显示的端口是没有变化的.
利用git来进行web开发的时候,通常涉及到文件权限的更改是不需要让git变更的。所以我们需要让git来排除chmod更改。
我们打开shell, cd到git根目录,执行命令: git config core.filemode false
然后我们再来执行git status就会发现少了很多需要变更的文件
建议设置到全局, 命令改为: git config --global core.filemode false
今天被一个同事一次提交近300个文件的更改(全部chmod...)吓到了, 提交前也不对比下, 不过 Gitlab 居然没有卡死.
参考: Git忽略chmod更改
在统一开发环境上很多团队很多公司做过很多尝试, 比如统一使用一个集成包, 使用 vagrant 等.
大部分都是在 Windows 下开发, 但是很多优秀的扩展和特性不被 Windows 支持,
同时很多人对 *nix 操作不熟练, 并且 vagrant 有个问题(其实是 VirtualBox 的问题)就是文件锁, 有时会导致 svn 无法提交/更新.
这里尝试给出另外一个方案, 个人觉得可行性还是很大的.
本文记录的方案只是个预案, 还没在公司实际推行.
本文演示环境使用 Ubuntu Server 14.04 和 Windows7
问题如下, 输入到 ins
, 一按 tab
键... 真是够了!!
fengqi@fengqi-MacBookPro ~$ brew ins
instal install
instal
是 install
的别名, 就是说允许少输入一个 l
也能用,
但是我想 输入 ins
然后按 tab
补全到 brew install xxx
啊
治疗办法是:
打开 vi /usr/local/Library/Homebrew/global.rb
, 找到如下部分
'ln' => 'link',
'instal' => 'install', # gem does the same
'rm' => 'uninstall',
删除 'instal' => 'install'
, 保存退出.
Yaf 默认是不提供数据层处理功能的, 需要自行扩展.
Eloquent ORM 是 Laravel 的内置 ORM 功能非常强大, 而且已经独立成组建, 任何项目都可以选择使用它.
目前最新版是5.0.28, 主要版本是跟随 Laravel 更新的, 下一个版本是 5.1 LTS 版, 非常棒.
在进行集成前, 需要开启 Yaf 的 namespace, 确保 php.ini
有如下配置:
yaf.use_namespace=1
为了方便管理, 建议使用 Composer 管理扩展, 以下示例均使用 Composer.
composer.json
, 内容如下:{
"require": {
"illuminate/database": "5.0.*",
"illuminate/events": "5.0.*",
"symfony/debug": "2.6.*",
"symfony/var-dumper": "2.6.*"
}
}
然后运行 composer update
下载代码, 并在 index.php
引入 vendor
目录下的 autoload.php
速度不理想可尝试我共享的镜像 http://composer.fengqi.me.
<?php
// 程序启动时间
define('APP_START_TIME', microtime(true));
// 程序跟目录
define('ROOT_PATH', realpath(__DIR__.'/../'));
// 加载 Composer
require ROOT_PATH.'/vendor/autoload.php';
// 启动程序
$app = new Yaf\Application(ROOT_PATH."/config/application.ini");
$app->bootstrap()->run();
application.ini
增加以下内容:; database
database.driver = mysql
database.host = 127.0.0.1
database.database = yaf
database.username = root
database.password = 123456
database.port = 3306
database.charset = utf8
database.collation = utf8_unicode_ci
database.prefix = ""
这里使用 MySQL 作为示例, Eloquent 支持 MySQL, Postgres, SQL Server, SQLite.
参考了解: xinted端口转发
Gmail 的 SMTP 和 IMAP 本来一直都是正常的,自从上次无故屏蔽后,虽然后来解封了,但是也变得断断续续了,不稳定。
这里简单分享下用 Linux 下的 Xinetd 代理 SMTP 和 IMAP 收发邮件的方法,原理是使用 Xinetd 进行端口转发,前提你你有一台能正常访问 Gmail 的服务器。
此法针对客户端,Web 端请自己想办法。
以 Ubuntu 14.04.2 为例:
sudo apt-get install -y xinetd
/etc/xinetd.d/gmail
,内容如下:链接地址: http://fonts.fengqi.me
原理很简单, 就是用 PHP 请求原本 fonts.googleapi.com 域名下的资源, 然后把 CSS 里面的链接也转换成我的域名, 链接是字体.
同时对字体文件做反向代理, 这个通过 Nginx 的 Proxy 实现.
需要注明的一个地方是, Google Fonts 针对不同的浏览器会输出不同的 CSS 和字体, 所以需要把用户的 USER_AGENT 也传递给 Google Fonts.
代码放到 GithubGist 上了.
把 VPS 里的 GitLab 停掉了, 占用太多 CPU 和内存, 私有的项目全部挪到 Bitbucket, 剩下的就继续放到 Github 上了.
平时玩手机除听歌看电子书外,更多的是刷知乎,碰到感兴趣的有意思的答案和问题会分享出去,后来觉得扰民就不再分享了,而是选择收藏起来。
在知乎客户端可以收藏到收藏夹,也可以直接导入到 Pocket、有道笔记、Evernote,我偏好 Evernote,主要的原因是他做的比较早,支持的 App 更多。
但是电脑上是不可以的,这里可以借助 IFTTT 和 在线 FEED 来自动收集,其实用浏览器剪藏插件也是可以的不过我想简化下操作:手机电脑都直接收藏就好。
另外就是适用面太窄,比如别人的公开收藏夹,比如你喜欢的一些博客更新了,不用挨个过去看是否更新,等邮件提醒就知道了,所以建议用好邮箱。