nginx代理后获取用户ip

nginx代理后获取用户ip

一部分内容来自:http://studygolang.com/articles/507

如果走代理,会是代理的ip

如果通过nginx代理,上边方法获得的是nginx的服务器的ip,所以这里要设置nginx代理


proxy_set_header Remote_addr $remote_addr;

一、sites-available
root@iZbp1jcwx7sfb1oasz6vw7Z:/etc/nginx# cd sites-available/
root@iZbp1jcwx7sfb1oasz6vw7Z:/etc/nginx/sites-available# ls
book.agoodme.com.conf  default  preview  transfer  upload
root@iZbp1jcwx7sfb1oasz6vw7Z:/etc/nginx/sites-available# vi transfer
server {
        listen       8080;
        server_name a.test.com;
#       limit_conn_zone one 5;
#       limit_rate 100k;
        proxy_set_header        Remote_addr       $remote_addr;
        location /v1/transfer {
                proxy_pass http://127.0.0.1:8088;
        }
        location /v1/ad {
                proxy_pass http://127.0.0.1:8871;
        }
        location /v1/verify {
                proxy_pass http://127.0.0.1:8870;
        }
}

二、 go 可以直接使用 net/http 来获取

nginx会 转发ip到go的服务器,在通过go获取header中的remote_adder 获取用户的ip

func ip(w http.ResponseWriter, r *http.Request) {
    fmt.Println(r.Header.get("Remote_addr"))
}

  nginx设置还可以设置X-Forward-For,这里没有测试,所以就没有贴出来,也是可以获取用户ip的,如果用户代理也是可以拿到真是ip的,通过header头获取虽然有可能被修改,但好像现在只有这几种方式,如果你有的方式,请回复出来,大家一起学习(x-forward-for的格式一般是:client_ip,proxy_ip,proxy_ip,...,所以,这样需要截取,如果用户没有走代理的话,这个会是空的)

  兼容go服务器的获取

func ip(w http.ResponseWriter, r *http.Request) {
    ip: = r.Header.get("Remote_addr")
    if (ip=="") {
       ip = r.RemoteAddr
    }
    fmt.Println(ip)
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

围观岳老师

雁过留音人过留名你鼓励为我动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值