如果服务器<code>80</code>端口已经被占用了,可以利用<code>nginx</code>进行端口的转发,加上如下配置即可:
vim /usr/local/nginx/conf/vhost/ngrok.XXX.com.conf
内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<code>upstream ngrok {</code>
<code>server </code><code>127.0</code><code>.</code><code>0.1</code><code>:</code><code>8888</code><code>; </code><code># 此处端口要跟 启动服务端ngrok 时指定的端口一致</code>
<code>keepalive </code><code>64</code><code>;</code>
<code>}</code>
<code>server {</code>
<code>listen </code><code>80</code><code>;</code>
<code>server_name </code><code>*</code><code>.ngrok.XXX.com;</code>
<code>access_log </code><code>/</code><code>data</code><code>/</code><code>wwwlogs</code><code>/</code><code>ngrok.XXX.com_access.log;</code>
<code>error_log </code><code>/</code><code>data</code><code>/</code><code>wwwlogs</code><code>/</code><code>ngrok.XXX.com_error.log;</code>
<code>location </code><code>/</code> <code>{</code>
<code>proxy_set_header X</code><code>-</code><code>Real</code><code>-</code><code>IP $remote_addr;</code>
<code>proxy_set_header X</code><code>-</code><code>Forwarded</code><code>-</code><code>For $proxy_add_x_forwarded_for;</code>
<code>proxy_set_header Host $http_host:</code><code>8888</code><code>; </code><code># 此处端口要跟 启动服务端ngrok 时指定的端口一致</code>
<code>proxy_set_header X</code><code>-</code><code>Nginx</code><code>-</code><code>Proxy true;</code>
<code>proxy_set_header Connection "";</code>
<code>proxy_pass http:</code><code>/</code><code>/</code><code>ngrok;</code>
重启nginx
service nginx reload
<code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>ngrok</code><code>/</code><code>bin</code><code>/</code><code>ngrokd </code><code>-</code><code>domain</code><code>=</code><code>"ngrok.XXX.com"</code> <code>-</code><code>httpAddr</code><code>=</code><code>":8888"</code> <code>-</code><code>httpsAddr</code><code>=</code><code>":8889"</code>
# domain填写刚才生成证书时的 NGROK_DOMAIN
# http和https端口可以自己指定,这里不采用80端口,是因为其他程序已经占用了,端口转发在上面nginx已经配置完成
# 如果想要后台启动,执行以下命令(后台启动有多种方法,选择其一即可)
<code>nohup </code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>ngrok</code><code>/</code><code>bin</code><code>/</code><code>ngrokd </code><code>-</code><code>domain</code><code>=</code><code>"ngrok.XXX.com"</code> <code>-</code><code>httpAddr</code><code>=</code><code>":8888"</code> <code>-</code><code>httpsAddr</code><code>=</code><code>":8889"</code> <code>> </code><code>/</code><code>dev</code><code>/</code><code>null </code><code>2</code><code>>&</code><code>1</code> <code>&</code>
# 如果想要开机启动,在rc.local中添加以下内容,具体内容请根据自己情况自行调整
vim /etc/rc.d/rc.local
<code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>ngrok</code><code>/</code><code>bin</code><code>/</code><code>ngrokd </code><code>-</code><code>domain</code><code>=</code><code>"ngrok.XXX.com"</code> <code>-</code><code>httpAddr</code><code>=</code><code>":8888"</code> <code>-</code><code>httpsAddr</code><code>=</code><code>":8889"</code> <code>> </code><code>/</code><code>var</code><code>/</code><code>log</code><code>/</code><code>ngrok.log &</code>
你编译出来的客户端和服务端是配套使用的,你可以把你的客户端分享给别人使用,别人只能连接你的服务器,别的服务器是连接不上的。
确保linux版<code>ngrok</code>有执行权限
chmod +x ngrok
在<code>ngrok</code>程序的同级目录下,编写配置文件
vim ngrok.cfg
内容如下:
19
20
21
22
23
24
25
26
27
28
<code>server_addr: </code><code>"ngrok.XXX.com:4443"</code>
<code>trust_host_root_certs: false</code>
<code>tunnels:</code>
<code> </code><code>test:</code>
<code> </code><code>subdomain: </code><code>"test"</code> <code>#定义服务器分配域名前缀</code>
<code> </code><code>proto:</code>
<code> </code><code>http: </code><code>80</code> <code>#映射端口,不加ip默认本机</code>
<code> </code><code>https: </code><code>80</code>
<code> </code><code>web:</code>
<code> </code><code>subdomain: </code><code>"web"</code> <code>#定义服务器分配域名前缀</code>
<code> </code><code>http: </code><code>192.168</code><code>.</code><code>1.100</code><code>:</code><code>80</code> <code>#映射端口,可以通过加ip为内网任意一台映射</code>
<code> </code><code>https: </code><code>192.168</code><code>.</code><code>1.100</code><code>:</code><code>80</code>
<code> </code><code>web1:</code>
<code> </code><code>hostname: </code><code>"ngrok.XXX.com"</code>
<code> </code><code>http: </code><code>80</code>
<code> </code><code>web2:</code>
<code> </code><code>hostname: </code><code>"XXX.com"</code>
<code> </code><code>ssh:</code>
<code> </code><code>remote_port: </code><code>50001</code> <code>#服务器分配tcp转发端口,如果不填写此项则由服务器分配</code>
<code> </code><code>tcp: </code><code>22</code> <code>#映射本地的22端口</code>
<code> </code><code>ssh1: </code><code>#将由服务器分配端口</code>
<code> </code><code>tcp: </code><code>21</code>
启动<code>ngrok</code>
./ngrok -subdomain test -config=ngrok.cfg 80
# 或者
./ngrok -config ngrok.cfg start test
#如果在配置文件里有配置多个端口映射,可以start多个
./ngrok -config ngrok.cfg start test ssh
# 如果出现问题连接不上,想在本地查看日志,可加上log参数
# ./ngrok -log ngrok.log -config ngrok.cfg start test
# 最终如果`Tunnel Status`显示`online`则表示成功了
由于服务器上开启了防火墙,使用的是<code>iptables</code>,所以需要将上面的端口添加到白名单
一共3个,一个是<code>ngrok</code>自身的<code>4443</code>端口,还有自定义的<code>8888 </code>http端口,<code>8889 </code>https端口
vim /etc/sysconfig/iptables
添加以下内容
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8889 -j ACCEPT
重启iptables
service iptables restart
如果你的服务器是阿里公有云ECS,那么你需要进行如下设置:管理控制台--ESC实例--管理--本实例安全组--配置规则--创建规则。 把服务端监听的三个端口放行就可以了。
<a href="http://s3.51cto.com/wyfs02/M00/99/0B/wKiom1lDVAfzXCBJAABiLrRTl9E431.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M02/99/0E/wKiom1lDb67BasfGAADZJ_zU5Lo747.jpg-wh_500x0-wm_3-wmp_4-s_2783627963.jpg" target="_blank"></a>
下载完成后直接解压。
tar -zxvf go1.7.4.linux-amd64.tar.gz -C /usr/local
设置环境变量,可以根据自己需要调整路径。
vim /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=$HOME/go
export GOROOT_BOOTSTRAP=/usr/local/go
使变量生效
source/etc/profile
查看是否安装成功
go env
交叉编译:就是在一个平台上生成另一个平台上的可执行代码。
网上有人说:服务器上要编译<code>windows客户</code>端版本时,需要进行如下设置:
cd /usr/local/go/src
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 ./make.bash
我在别的服务器测试过后,不用这样也行,直接按上篇的方法直接编译即可。
我按上面进行设置。反而会报这样的错:
go ./make.bash: eval: line 135: syntax error near unexpected token `(
ERROR: Cannot find /root/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
报错原因:go新版本不是用C编写的,而1.4之前的是C编写的,所以需要先安装1.4的,才能编译1.6的,于是便先安装了1.4,再安装1.6。
本文转自pizibaidu 51CTO博客,原文链接:http://blog.51cto.com/pizibaidu/1937401,如需转载请自行联系原作者