我不是技术
PHP成长
ARTICLE
linux相关
ARTICLE
其他类别
ARTICLE
文章
> 公网服务器安装nps代理内网web应用
20:58
2022/04/05
3178
公网服务器安装nps代理内网web应用
nps项目地址:[https://github.com/ehang-io/nps](https://github.com/ehang-io/nps "点击打开") 文档地址:[https://ehang-io.github.io/nps/#/install](https://ehang-io.github.io/nps/#/install "https://ehang-io.github.io/nps/#/install") 这是一个开源的项目,据说是后起之秀,网上应该用的人不是太多。所以网上很多相关的教程也是基本的教程基本的用法文档写的也是比较容易懂,只是有一些问题可能找不到答案,需要自己去摸索。 ### 安装 因为我没有go环境,所以直接下载源码安装,我这里因为是centos7的系统所以选择的是`linux_amd64_server.tar.gz`这个压缩包,然后解压出来后是这么样子的 conf文件夹下面有配置文件,可以先配置再安装,这里安装过程会把这两个文件夹复制到安装目录。所以也可以先安装后再在安装目录修改配置文件。切换到解解压的目录。 ```shell ./nps install ``` ### 启动 ```shell nps start ``` 默认管理面板的端口是8080,管理面板也挺好用的,他这个配置也挺灵活的,可以在服务端管理面板配置,也可以在客户端用配置文件的方式配置(这种方式就不需要用到管理面板了),这里我是用的客户端配置文件模式,直接用的域名代理。 ```shell [web1] host=a.proxy.com target_addr=127.0.0.1:80 host_change=www.proxy.com header_set_proxy=nps ``` 主要就是这一段,`host_change=www.proxy.com`这个和`header_set_proxy=nps`可以不要,打开客户端和服务器成功连接后,访问域名,就可以访问内网的web应用了。 ### 客户端ip 但是这个虽然是能访问了,却有一个问题就是,内网web应用获取的客户端ip是npc客户端的ip,并不是真实访问端的客户端ip,再看文档,文档里面有这么一段话 > 获取用户真实ip 如需使用需要在nps.conf中设置http_add_origin_header=true 在域名代理模式中,可以通过request请求 header 中的 X-Forwarded-For 和 X-Real-IP 来获取用户真实 IP。 本代理前会在每一个http(s)请求中添加了这两个 header。 我在nps配置文件修改了后,好像并未生效,我在程序中调试了一下发现没有X-Forwarded-For 和 X-Real-IP这两个树形,问了一位朋友,朋友告诉我这两个好像要在Nginx中自己打开,给了我一个方向,网上查了一番Nginx使用这个是需要安装ngx_http_realip_module 模块,默认是不被编译的,在安装Nginx编译是添加`--with-http_realip_module`即可,然后Nginx的配置文件添加这两个 ```shell set_real_ip_from 127.0.0.1;#这个是npc客户端的ip,意思就是告诉Nginx这个ip是代理ip real_ip_header X-Forwarded-For; ``` 这样就能成功获取真实ip。