自从上次获取真实ip成功后,发现用https的时候遇到一些问题,如果用nps处理ssl的话,我按照文档说明配置了,但是会发现网页打不开,而如果nps只转发https流量,内网服务器处理ssl的话,获取的ip仍然是内网客户端的ip,这个问题也是折磨了我很久,百度也没有个所以然,可能用nps 的人都没有这个需求吧。
在今天无意间灵光咋现,既然nps可以只转发https不处理ssl,为何我不用Nginx先处理了再让nps转发?所以就在公网服务器上装了Nginx,一样的需要打开`--with-http_realip_module`这个模块,然后根据官方文档,nps配合Nginx
```shell
#如需使用https也可在nginx监听443端口并配置ssl,并将本代理的httpsProxyPort设置为空关闭https
server {
listen 443;
server_name *.proxy.com;
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;
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8020; #这里是nps设置的http端口
}
}
```
这样设置后,客户端配置文件不能设置内网端口为443,不然会一直重定向。这样就能够正常访问网站了,但是获取到的ip依然只是内网客户端的ip,是因为公网服务器Nginx需要添加客户端ip
```shell
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8020;
}
```
然后内网服务器添加这段
```shell
set_real_ip_from 192.168.4.0/24;
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
```
这个时候获取到的ip就不再是内网客户端ip了