专栏首页游戏开发司机nginx代理配置根据ip地址来转发到不同的地址端口

nginx代理配置根据ip地址来转发到不同的地址端口

最近我们在开发的某SLG游戏的某业务要做如下场景:

要求在全球各个区域访问离他最近的服务器节点:用户通过访问域名A,在服务器端解析用户来源,根据ip地址来源来转发到对应的最近的服务器节点。

由于我们之前的业务一些设计很难调整,所以我将通过nginx来进行做转发处理,本片文章我将使用nginx/apache做反向代理来识别访问用户的ip区域来做转发。

首先,准备好安装 nginx服务器:

1. yum search nginx-module 先查找是否有geoip模块

2.安装geoip模块:

yum install nginx-module-geoip*

3.安装geoip安装。

yum install geoip-devel

4.配置nginx.conf

添加模块

load_module /usr/lib64/nginx/modules/ngx_http_geoip_module.so;

配置数据源:geoip_country /usr/share/GeoIP/GeoIP.dat; fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

load_module /usr/lib64/nginx/modules/ngx_http_geoip_module.so; 

events {
    worker_connections  65535;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    geoip_country  /usr/share/GeoIP/GeoIP.dat;
    fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
                      #'$geoip_country_name $geoip_region $geoip_city';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

5.在配置文件里加入如下信息:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        if ($geoip_country_code = CN) {
                proxy_pass http://www.baidu.com;
        }
        if ($geoip_country_code !~ CN) {
                proxy_pass http://www.sohu.com;
        }
    }

}

6.这样不通区域的用户就被转发到就近的服务器节点上了。

文章分享自微信公众号:
游戏开发司机

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:高司机
原始发表时间:2022-03-25
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

推荐阅读

  • 分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

    随着微服务架构的流行,客户端发起的一次请求可能需要涉及到多个或 N 个服务,致使我们对服务之间的监控和排查变得更加复杂。

    Rainbond开源
    微服务Kubernetes云计算
  • 开发者成长激励计划-基于TencentOS Tiny移植JS解释器

    此方案是建基于TencentOS Tiny CH32V_EVB RISC-V开发套件。开发板是采用沁恒RISC-VMCUCH32V307VCT6芯片,CH32V305/7系列是基于沁恒自研RISC-V架构微处理器青稞V4系列设计的32位工业级互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口UART数量到8组,定时器到10组,其中4组高级定时器。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,而以太网MAC升级到千兆并集成了10M-PHY模块,并且板载有esp8266 WiFi模组,支持腾讯云固件,这样提供了强大多元化的网络传输能力。同时板载有1.54寸 IPS高清显示屏,支持240*240分辨率,可以即时反馈相关的数据信息。再结合TencentOS Tiny开源物联网操作系统简便快速的开发如虎添翼。配合腾讯云物联网开发平台IoT Explorer 和腾讯连连小程序能高效地开发出基于物联网应用技术的智能设备。

    曙光磁铁
    TencentOS Tiny嵌入式JavaScript
  • 网页模板 pug 基本语法

    pug 原名 jade ,因版权问题更名为 pug ,即哈巴狗。与 hexo 默认模块 ejs 一样,pug 也是一个模板引擎,可用于快速的网站开发,当然也可以用于静态博客网站的设计。本站点现时所用主题 manupassant 也使用了 pug 。

    义含遗憾
  • 深度解读 Vite 的依赖扫描?

    当我们首次运行 Vite 的时候,Vite 会执行依赖预构建,目的是为了兼容 CommonJS 和 UMD,以及提升性能。

    CandyTong
  • 开发者成长激励计划-开发笔记:最简步骤移植LVGL

    参数项目”自修伴侣“需要LCD上显示时钟,考虑移植LVGL。查了一些资料LVGL生态还是不错,不过其强大也就意味的移植,应用开发不会简单;此外lvgl快速发展,以为找到的各种教程版本差异导致你整合到一起不一定能工作。最简便的方法就是站在前人的肩膀上,把手上获得相同硬件平台的lvgl(好像是最近master分支)模块(文件)拷贝到自己的工程,再在工程上对应修改。因为绕开了移植操作,最是方便happy path。

    flavorfan
    TencentOS Tiny
  • React18 带来了什么

    经历了v17的平缓过渡,React 3月29日正式发布了React v18版本。这个版本带来了一些十分重要的能力。但大家伙不必担心学不动,这个版本无破坏性更新,hooks 还在。以下是核心功能更新。

    jadeCarver
    React
  • 使用 COSCLI 快速迁移本地数据到 COS

    在 GitHub 或者 Gitee 等其他地方“白嫖“存储难免会遇到无法访问的时候,例如前段时间 jsDelivr 就因为被 DNS 污染导致无法访问、Gitee 公开仓库私有...

    沈唁
    对象存储WordPress
  • 实现简版 react 状态管理器 mobx

    mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。

    测不准
    React
  • ESLint 插件规则编写的正确打开方式

    ESLint 是⼀个开源的代码静态分析修复⼯具 cli,解析代码为 AST 使用的是 espree 解析器,该解析器最初是从经典的 esprima 解析器中 fork 出来的,但是现在基于另一个媲美 esprima 的新轮子 acorn,同时,@babel/parser 也是基于 acorn 解析器的。

    CS逍遥剑仙
    ESLint
  • 从根儿上理解MySQL索引

    我创建了一个存储引擎为InnoDB的表user_innodb,其中包含主键id、姓名字段(name)、性别字段(gender,用0,1表示不同性别)、手机号字段(phone),并批量初始化了500W+条数据。

    蝉沐风
    MySQL数据库云数据库 MySQL

扫码关注腾讯云开发者

领取腾讯云代金券