利用nginx与frp/ngrok实现内网穿透,将网站架在自己家里或者公司内部

利用nginx与frp/ngrok实现内网穿透,将网站架在自己家里或者公司内部

这个需求其实在天朝一直都是比较强烈的,对于一些小企业,或者是个人,能够把网站架在企业内部,或者家里是非常方便的一件事情,但现在国内,如果没有备案的域名往往是无法被解析到相应的服务器的,但使用https却不受影响。基于以上原因,将服务器架在自己家里或者公司内部,就不受限制了。

frp还是ngrok?

就目前来看这两个工具好像是使用最为广泛的,ngrok需要自己编译,也还算比较方便,但frp你可以直接下载编译好的版本,并且linux/win的版本都已经编译好了,下载后就可以直接使用。所以这里直接以frp作为样例。

为什么还要nginx?

内网穿透,但无论如何还是需要一台有固定IP的公网服务器。如果你购买或者租用了一台公网服务器,其实不可能只用它来做中转,应该还是会用它来架一些其他的服务,如果我们直接在上面架frp或者ngrok来监控80和443端口,感觉还是有点浪费了。所以我们前端使用nginx来管理,后面可以将请求转到相应的服务端口即可,当然frp/ngrok也就放到nginx的后面了,后面还可以有tomcat或者iis、apache等。

重点还是在nginx的配置

在下面的配置中,我在公网服务器上同样架了tomcat,端口8080,但并没有对外开放,只能使用127.0.0.1:8080进行访问,然后架了frps,端口开放为7000,同时这个7000也是frpc连接使用。将80端口的访问转向443,然后使用nginx反向代理,将443的请求以http协议转发到frps,然后转到内网的的服务器上。由于nginx已经配置了泛域名证书支持,所以所有的子站均显示为安全网站 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
upstream tomcat9 {
server 127.0.0.1:8080;
}

upstream frps {
server 127.0.0.1:7000;
}
server {
listen 80;
server_name www.easex.cn;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;

proxy_pass http://tomcat9/;
}
}
server {
listen 80;
server_name *.easex.cn;
return 301 https://$http_host$request_uri;
}
server {
listen 443 ssl http2;
server_name *.easex.cn;

ssl_certificate cert/easex.cn/fullchina.cer;
ssl_certificate_key cert/easex.cn/easex.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;

access_log logs/easex.cn_access.log;
error_log logs/easex.cn_error.log;

location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;

proxy_pass http://frps/;
}

}


上一篇
Mariadb(mysql)默认时区处理及docker运行配置 Mariadb(mysql)默认时区处理及docker运行配置
Mariadb(mysql)默认时区处理及docker运行配置查看时区和当前时间12show variables like "%time_zone%";select now(); 临时修改时区123set global
2019-07-15
下一篇
nginx泛域名http(80)强制跳转https(443) nginx泛域名http(80)强制跳转https(443)
nginx泛域名http(80)强制跳转https(443)随着chrome浏览器在地址栏开始标注网站『不安全』的提示开始,各大小网站都开始从http转为https了,并且都更注重网站的安全了。然页我们之前的很多站点都是基于http开发的,
2019-04-17