OpenResty 返回请求IP

2023-08-31  本文已影响0人  猪蹄胖

一、需求

需要了解PC端即时通讯软件,在每次开机时所处的地理位置,获取上网的公网IP

二、实现方式

通过openresty 在nginx.conf中,添加lua编写的逻辑代码,既能实现轻量级的服务。

#user  nobody;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       8888;
        server_name  localhost;
        location / {
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            default_type        text/html;
            content_by_lua_block {
                local local_ip = ngx.req.get_headers()["X-Real-IP"]
                if local_ip == nil then
                    local_ip = ngx.req.get_headers()["x_forwarded_for"]
                end
                if local_ip == nil then
                    local_ip = ngx.var.remote_addr
                end
                ngx.say("Client_IP : ", local_ip)
            }
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       9999 ssl;
        server_name  localhost;
        ssl_certificate      /usr/local/openresty/nginx/conf/cert/cert.pem;
        ssl_certificate_key  /usr/local/openresty/nginx/conf/cert/key.pem;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            default_type        text/html;
            content_by_lua_block {
                local local_ip = ngx.req.get_headers()["X-Real-IP"]
                if local_ip == nil then
                    local_ip = ngx.req.get_headers()["x_forwarded_for"]
                end
                if local_ip == nil then
                    local_ip = ngx.var.remote_addr
                end
                ngx.say("Client_IP : ", local_ip)
            }
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读