内网穿透NPS和宝塔Nginx配合使用,开启SSL访问本地局域网网络
1. 服务器NPS配置
NPS install安装后,配置文件会在其他位置,通过是 /etc/nps/nps.conf目录。
找到进行修改,主要修改的是http_proxy_port和https_proxy_port,它们使用的端口是80和443,肯定是和Nginx冲突的,所以先去掉冲突,才能让两个程序同时运行。
appname = nps
#Boot mode(dev|pro)
runmode = dev
#HTTP(S) proxy port, no startup if empty
http_proxy_ip=0.0.0.0
http_proxy_port=85 #主要修改1:不要占用80端口
#https_proxy_port=443 #主要修改2:不要占用443端口,直接注释
https_just_proxy=false
#default https certificate setting
https_default_cert_file=conf/pro.metarouse.net/Nginx/server.pem
https_default_key_file=conf/pro.metarouse.net/Nginx/server.key
#.... 剩余的这个任务里面不需要改
2. 宝塔面板内修改站点对应的Nginx配置
找到配置文件的修改地方后,进行配置的修改,目标是让流量从Nginx直接到NPS中。
通过是需要在云服务器上运行nginx来保证静态文件缓存等,在上述重NPS的配置文件中将httpProxyPort设置为85端口(看上文配置),那么在在Nginx中配置如下:
server {
listen 80;
server_name pro.metarouse.net; #1. 需要换成你的域名
location / {
proxy_set_header Host $host:$proxy_port; #Host和端口都加上
proxy_pass http://127.0.0.1:85; #85即是NPS的端口,这里意思就是有人访问了 pro.metarouse.net:80,然后直接就转到本地NPS 85服务
}
}
如果复制后有错误,请去掉 #以及后面的注释
如需使用https也可在nginx监听443端口并配置ssl,并将通上面NPS配置描述的httpsProxyPort设置为空,关闭NPS的HTTPS即可。然后和Http一样,进行路由,并且开启Https。
你的配置和我的可能不完全一样,大部分还是默认宝塔自己默认的就行,
server {
listen 443 ssl http2;
server_name pro.metarouse.net;
ssl on;
ssl_certificate certificate.crt;
ssl_certificate_key private.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#主要就是下面了,其实上面那些都是我这边默认的,而这里和Http的其实一摸一样
location / {
proxy_set_header Host $host:$proxy_port;
proxy_pass http://127.0.0.1:85;
}
}
当然也可以通过宝塔面板本身的反向代理来进行操作。
3. 宝塔面板内修改站点对应的Nginx配置
更换HTTPs证书
A思路
直接把阿里NPS域名解析的地址改为阿里服务器,但地址一定要记为 “127.0.0.1:端口号” 才可以。然后再通过阿里服务上的相同域名的站点来申请证书。申请到之后,再复制给本地服务器使用。
**问题:**由于NPS和阿里服务Nginx的端口冲突,导致Nginx没有启动,所以证书申请的时候无法访问到
/.well-known/acme-challenge/ 这个目录下的文件。导致申请失败。
B思路
已经使用NPS桥接了阿里和本地服务器,可以直接用用本地服务申请证书。但是需要注意两点。
NPS的域名解析地址要改为 http 的端口,而不是之前 Https 的端口。
如果出现 /usr/bin/curl: /usr/local/lib/libcurl.so.4: no version information available (required by /usr/bin/curl) curl: (7) Couldn't connect to server 的错误,需要修复本地服务的CURL即可。
申请成功后,需要把NPS的http端口改回到HTTPS的端口才可使用。