Nginx——反向代理(三/五)

目录

  • 1.Nginx 反向代理
    • 1.1.Nginx 反向代理概述
    • 1.2.Nginx 反向代理的配置语法
      • 1.2.1.proxy_pass
      • 1.2.2.proxy_set_header
      • 1.2.3.proxy_redirect
    • 1.3.Nginx 反向代理实战
    • 1.4.Nginx 的安全控制
      • 1.4.1.如何使用 SSL 对流量进行加密
      • 1.4.2.Nginx 添加 SSL 的支持
      • 1.4.3.Nginx 的 SSL 相关指令
        • 1.4.3.1.生成证书
        • 1.4.3.2.开启 SSL 实例
    • 1.5.反向代理系统调优

本文笔记整理自黑马程序员 Nginx 教程,相关资料可在该视频评论区中领取。

1.Nginx 反向代理

Nginx 的反向代理在现代 Web 应用架构中扮演着重要角色,其主要作用包括但不限于以下几个方面,下面将结合具体例子进行说明:

  • 负载均衡:当有多个后端服务器时,Nginx 反向代理可以根据预定义的规则(如轮询、最少连接、IP哈希等)将请求分发到不同的服务器,从而平衡各服务器的负载,提高整体系统的性能和可用性。例如,假设有三台后端服务器A、B、C,Nginx 可以根据配置将请求依次或按照特定比例分发到这三台服务器上,确保每台服务器都能处理适量的请求。
  • 增强安全性:通过隐藏后端服务器的真实IP地址和架构细节,Nginx 反向代理可以有效地保护后端资源免受直接攻击。同时,它还可以集中实施安全策略,如 SSL/TLS 加密、请求过滤等。例如,Nginx 可以配置为仅允许特定 IP 地址或子网段的请求通过,或者基于请求头信息(如 User-Agent、Referer)进行访问控制,从而阻止或限制潜在的恶意访问。
  • 提升缓存效率:Nginx 反向代理可以缓存静态内容和一些动态内容(如页面预渲染版本),减轻后端服务器的压力,同时提高响应速度。当客户端再次访问相同内容时,Nginx 可以直接从缓存中读取并返回给客户端,而无需再次请求后端服务器。例如,一个热门的新闻网站可能有很多用户频繁访问,Nginx 可以缓存这些新闻页面的内容,从而减少对后端服务器的请求次数和响应时间。
  • 实现灵活的请求路由:通过配置不同的路由规则,Nginx 反向代理可以将不同类型的请求导向不同的后端服务,实现微服务架构或者API网关的功能。例如,可以将对 /api 路径的请求转发到后端 API 服务器,将对 /static 路径的请求转发到静态文件服务器。
  • 简化客户端访问:对于包含多个子系统或服务的复杂应用,Nginx 反向代理可以提供一个统一的访问点,使得客户端无需关心后端的复杂结构。客户端只需与 Nginx 反向代理进行通信,即可访问到所需的资源或服务。例如,一个大型电商平台可能包含多个子系统(如商品系统、订单系统、支付系统等),Nginx可以配置为将不同类型的请求转发到相应的子系统上,客户端只需访问 Nginx 的域名或 IP 地址即可。

1.1.Nginx 反向代理概述

关于正向代理和反向代理,我们在前面的章节已经介绍过了,简而言之就是正向代理代理的对象是客户端,反向代理代理的是服务端,这是两者之间最大的区别。Nginx 即可以实现正向代理,也可以实现反向代理。我们先来通过一个小案例演示下 Nginx 正向代理的简单应用。具体需求如下:

在这里插入图片描述

(1)服务端的设置:

http {log_format main 'client send request=>clientIp=$remote_addr serverIp=>$host';server{listen 80;server_name	localhost;access_log logs/access.log main;location {root html;index index.html index.htm;}}
}

(2)使用客户端访问服务端,打开日志查看结果:

在这里插入图片描述

(3)代理服务器设置:

server {listen  82;resolver 8.8.8.8;	# 设置 DNS 的 IP,用来解析 proxy_pass 中的域名location / {proxy_pass http://$host$request_uri;}}

(4)查看代理服务器的 IP (192.168.200.146) 和 Nginx 配置监听的端口 (82)

(5)在客户端配置代理服务器:

在这里插入图片描述

(6)设置完成后,再次通过浏览器访问服务端

在这里插入图片描述

通过对比,上下两次的日志记录,会发现虽然我们是客户端访问服务端,但是如何使用了代理,那么服务端能看到的只是代理发送过去的请求,这样的化,就使用 Nginx 实现了正向代理的设置。但是 Nginx 正向代理,在实际的应用中不是特别多,所以我们简单了解下,接下来我们继续学习 Nginx 的反向代理,这是 Nginx 比较重要的一个功能。

1.2.Nginx 反向代理的配置语法

Nginx 反向代理模块的指令是由 ngx_http_proxy_module 模块进行解析,该模块在安装 Nginx 的时候已经自己加装到 Nginx 中了,接下来我们把反向代理中的常用指令一一介绍下:

  • proxy_pass
  • proxy_set_header
  • proxy_redirect

1.2.1.proxy_pass

该指令用来设置被代理服务器地址,可以是主机名称、IP 地址加端口号形式。

语法proxy_pass URL;
默认值-
位置location
  • URL:为要设置的被代理服务器地址,包含传输协议 (httphttps://)、主机名称或 IP 地址加端口号、URI 等要素。

那么在编写代理服务器的 proxy_pass 的时候,后面的值要不要加 “/”?接下来通过例子来说明刚才我们提到的问题:

server {listen 80;server_name localhost;location / {# proxy_pass http://192.168.200.146;proxy_pass http://192.168.200.146/;}
}

当客户端访问 http://localhost/index.html,效果是一样的。

server{listen 80;server_name localhost;location /server {# proxy_pass http://192.168.200.146;		# 末尾不加 / 会把 /server 拼接到被代理的 IP 地址末尾proxy_pass http://192.168.200.146/;			# 末尾加 / 则不会把 /server 拼接到被代理的 IP 地址末尾}
}

当客户端访问 http://localhost/server/index.html,这个时候,第一个 proxy_pass 就变成了 http://localhost/server/index.html,第二个 proxy_pass 就变成了 http://localhost/index.html,效果就不一样了。

1.2.2.proxy_set_header

该指令可以更改 Nginx 服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给代理的服务器。

语法proxy_set_header field value;
默认值proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
位置http、server、location

需要注意的是,如果想要看到结果,必须在被代理的服务器上来获取添加的头信息。

被代理服务器: [192.168.200.146]

server {listen  8080;server_name localhost;default_type text/plain;return 200 $http_username;
}

代理服务器: [192.168.200.133]

server {listen  8080;server_name localhost;location /server {proxy_pass http://192.168.200.146:8080/;proxy_set_header username TOM;}}

1.2.3.proxy_redirect

该指令是用来重置头信息中的 “Location” 和 “Refresh” 的值。

语法proxy_redirect redirect replacement;
proxy_redirect default;
proxy_redirect off;
默认值proxy_redirect default;
位置http、server、location

》为什么要用该指令?

服务端[192.168.200.146]

server {listen  8081;server_name localhost;if (!-f $request_filename){return 302 http://192.168.200.146;}
}

代理服务端[192.168.200.133]

server {listen  8081;server_name localhost;location / {proxy_pass http://192.168.200.146:8081/;proxy_redirect http://192.168.200.146 http://192.168.200.133; # 可以防止向客户端暴露服务器端的 IP 地址。}
}

该指令的几组选项:

  • proxy_redirect redirect replacement;
    • redirect:目标,Location 的值
    • replacement:要替换的值
  • proxy_redirect default;
    • default:将 location 块的 uri 变量作为 replacement,将 proxy_pass 变量作为 redirect 进行替换
  • proxy_redirect off;:关闭 proxy_redirect 的功能

1.3.Nginx 反向代理实战

在这里插入图片描述

服务器 1、2、3 存在两种情况

  • 第一种情况:三台服务器的内容不一样。
  • 第二种情况:三台服务器的内容是一样。

上述服务器的 IP 地址如下:

  • 代理服务器:192.168.200.133
  • 服务端 1:192.168.200.146:9001
  • 服务器 2:192.168.200.146:9002
  • 服务器 3:192.168.200.146:9003

如果服务器 1、服务器 2 和服务器 3 的内容不一样,那我们可以根据用户请求来分发到不同的服务器。

# 代理服务器
server {listen          8082;server_name     localhost;location /server1 {proxy_pass http://192.168.200.146:9001/;}location /server2 {proxy_pass http://192.168.200.146:9002/;}location /server3 {proxy_pass http://192.168.200.146:9003/;}
}
# 服务端 server1
server {listen          9001;server_name     localhost;default_type text/html;return 200 '<h1>192.168.200.146:9001</h1>'
}
# 服务端 server2
server {listen          9002;server_name     localhost;default_type text/html;return 200 '<h1>192.168.200.146:9002</h1>'
}
# 服务端 server3
server {listen          9003;server_name     localhost;default_type text/html;return 200 '<h1>192.168.200.146:9003</h1>'
}

如果服务器 1、服务器 2 和服务器 3 的内容是一样的,该如何处理?见后续的负载均衡部分的内容。

1.4.Nginx 的安全控制

关于 Web 服务器的安全是比较大的一个话题,里面所涉及的内容很多,Nginx 反向代理是如何来提升 Web 服务器的安全呢?答案是安全隔离,即通过代理分开了客户端到应用程序服务器端的连接,实现了安全措施。在反向代理之前设置防火墙,仅留一个入口供代理服务器访问。

在这里插入图片描述

1.4.1.如何使用 SSL 对流量进行加密

(1)翻译成大家能熟悉的说法就是将我们常用的 http 请求转变成 https 请求,那么这两个之间的区别简单的来说两个都是 HTTP 协议,只不过 https 是身披 SSL 外壳的 http。https 是一种通过计算机网络进行安全通信的传输协议。它经由 http 进行通信,利用 SSL/TLS 建立全通信,加密数据包,确保数据的安全性。

  • SSL (Secure Sockets Layer) 安全套接层
  • TLS (Transport Layer Security) 传输层安全

(2)上述这两个是为网络通信提供安全及数据完整性的一种安全协议,TLS 和 SSL 在传输层和应用层对网络连接进行加密。总结来说为什么要使用 https:http 协议是明文传输数据,存在安全问题,而 https 是加密传输,相当于 http+ssl,并且可以防止流量劫持。

(3)Nginx 要想使用 SSL,需要满足一个条件即需要添加一个模块 --with-http_ssl_module,而该模块在编译的过程中又需要 OpenSSL 的支持,这个我们之前已经准备好了。

1.4.2.Nginx 添加 SSL 的支持

(1)完成 --with-http_ssl_module 模块的增量添加:

  • 将原有 /usr/local/nginx/sbin/nginx 进行备份
  • 拷贝 Nginx 之前的配置信息
  • 在 Nginx 的安装源码进行配置指定对应模块 ./configure --with-http_ssl_module
  • 通过 make 模板进行编译
  • 将 objs 下面的 Nginx 移动到 /usr/local/nginx/sbin
  • 在源码目录下执行 make upgrade 进行升级,这个可以实现不停机添加新模块的功能

1.4.3.Nginx 的 SSL 相关指令

因为刚才我们介绍过该模块的指令都是通过 ngx_http_ssl_module 模块来解析的。

  • ssl:该指令用来在指定的服务器开启 HTTPS,可以使用 listen 443 ssl,后面这种方式更通用些。
语法ssl on | off;
默认值ssl off;
位置http、server
server{listen 443 ssl;
}
  • ssl_certificate:为当前这个虚拟主机指定一个带有 PEM 格式证书的证书。
语法ssl_certificate file;
默认值
位置http、server
  • ssl_certificate_key:该指令用来指定 PEM secret key 文件的路径
语法ssl_ceritificate_key file;
默认值
位置http、server
  • ssl_session_cache:该指令用来配置用于 SSL 会话的缓存
语法ssl_sesion_cache off|none|[builtin[:size]] [shared:name:size]
默认值ssl_session_cache none;
位置http、server
- off:禁用会话缓存,客户端不得重复使用会话
- none:禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存储会话参数
- builtin:内置 OpenSSL 缓存,仅在一个工作进程中使用。
- shared:所有工作进程之间共享缓存,缓存的相关信息用 name 和 size 来指定
- ssl_session_timeout:开启 SSL 会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间。
语法ssl_session_timeout time;
默认值ssl_session_timeout 5m;
位置http、server
  • ssl_ciphers:指出允许的密码,密码指定为 OpenSSL 支持的格式
语法ssl_ciphers ciphers;
默认值ssl_ciphers HIGH:!aNULL:!MD5;
位置http、server

可以使用 openssl ciphers 查看 openssl 支持的格式。

  • ssl_prefer_server_ciphers:该指令指定是否服务器密码优先客户端密码
语法ssl_perfer_server_ciphers on|off;
默认值ssl_perfer_server_ciphers off;
位置http、server
1.4.3.1.生成证书

方式一:使用阿里云/腾讯云等第三方服务进行购买。

方式二:使用 openssl 生成证书

先要确认当前系统是否有安装 openssl

openssl version

安装下面的命令进行生成

mkdir /root/cert
cd /root/cert
openssl genrsa -des3 -out server.key 1024		# 123456
openssl req -new -key server.key -out server.csr	# 123456
cp server.key server.key.org
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

在这里插入图片描述

最终生成的文件如下:

在这里插入图片描述

1.4.3.2.开启 SSL 实例
server {listen       443 ssl;server_name  localhost;ssl_certificate      /root/cert/server.crt;    # 根据实际情况进行配置ssl_certificate_key  /root/cert/server.key;		# 根据实际情况进行配置ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;location / {root   html;index  index.html index.htm;}
}

验证:

在这里插入图片描述

1.5.反向代理系统调优

反向代理值 Buffer 和 Cache:Buffer翻译过来是"缓冲",Cache 翻译过来是"缓存"。

在这里插入图片描述

总结下:

  • 相同点:两种方式都是用来提供 IO 吞吐效率,都是用来提升 Nginx 代理的性能。
  • 不同点:
    • 缓冲主要用来解决不同设备之间数据传递速度不一致导致的性能低的问题,缓冲中的数据一旦此次操作完成后,就可以删除。
    • 缓存主要是备份,将被代理服务器的数据缓存一份到代理服务器,这样的话,客户端再次获取相同数据的时候,就只需要从代理服务器上获取,效率较高,缓存中的数据可以重复使用,只有满足特定条件才会删除。

(1)Proxy Buffer 相关指令

  • proxy_buffering:该指令用来开启或者关闭代理服务器的缓冲区;
语法proxy_buffering on|off;
默认值proxy_buffering on;
位置http、server、location
  • proxy_buffers:该指令用来指定单个连接从代理服务器读取响应的缓存区的个数和大小。
语法proxy_buffers number size;
默认值proxy_buffers 8 4k | 8K;(与系统平台有关)
位置http、server、location
- number:缓冲区的个数
- size:每个缓冲区的大小,缓冲区的总大小就是 number * size
  • proxy_buffer_size:该指令用来设置从被代理服务器获取的第一部分响应数据的大小。保持与 proxy_buffers 中的 size 一致即可,当然也可以更小。
语法proxy_buffer_size size;
默认值proxy_buffer_size 4k | 8k;(与系统平台有关)
位置http、server、location
  • proxy_busy_buffers_size:该指令用来限制同时处于 BUSY 状态的缓冲总大小。
语法proxy_busy_buffers_size size;
默认值proxy_busy_buffers_size 8k|16K;
位置http、server、location
  • proxy_temp_path:当缓冲区存满后,仍未被 Nginx 服务器完全接受,响应数据就会被临时存放在磁盘文件上,该指令设置文件路径。注意 path 最多设置三层。
语法proxy_temp_path path;
默认值proxy_temp_path proxy_temp;
位置http、server、location
  • proxy_temp_file_write_size:该指令用来设置磁盘上缓冲文件的大小。
语法proxy_temp_file_write_size size;
默认值proxy_temp_file_write_size 8K|16K;
位置http、server、location

通用网站的配置

proxy_buffering on;
proxy_buffer_size 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

根据项目的具体内容进行相应的调节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VBA(Visual Basic for Applications)编程|excel|一系列网址或文件路径快速转换为可点击的超链接

很多时候&#xff0c;我们需要把导入的数据某一列转换成超链接&#xff0c;比如URL形式的列。 那么&#xff0c;大批量的情况下&#xff0c;无疑一个个手动点击是非常愚蠢的办法&#xff0c;这个时候我们就需要VBA编程来编写宏&#xff0c;通过编写宏来简化这些手动操作并不现…

【C++】图像模糊处理题目详解与实现

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述题目内容输入格式输出格式示例输入&#xff1a;输出&#xff1a; &#x1f4af;题目分析问题拆解 &#x1f4af;我的做法代码实现代码分析 &#x1f4af;老师的做法…

在 Ubuntu 22.04 上部署 AppArmor 应用安全教程

在这篇教程中&#xff0c;我们将为你设置 AppArmor 以增强应用程序的安全性。 AppArmor 是一个 Linux 安全模块&#xff0c;允许你限制各个程序的功能。通过强制执行强制访问控制策略&#xff0c;AppArmor 增强了你的应用程序和系统的安全性。 AppArmor 是一个易于使用的 Lin…

Nginx:动静分离

什么是动静分离? 动静分离 是指将网站中的静态资源(如图片、样式表、脚本等)和动态内容(如 PHP、Python、Node.js 等后端生成的内容)分开部署和处理。这样做的好处是可以利用不同的服务器或缓存策略来优化不同类型的资源。 动静分离的好处 提高性能:静态资源可以直接从…

每天40分玩转Django:Django插件开发

Django插件开发 一、插件开发概述表 阶段主要任务技术要点难度准备工作项目结构设计、环境配置项目布局、setup.py★★★☆☆开发实现功能开发、测试编写Django AppConfig、Signals★★★★☆文档编写API文档、使用说明Markdown、reStructuredText★★★☆☆发布部署PyPI打包…

什么是TDD测试驱动开发(Test Driven Development)?

什么是测试驱动开发&#xff1f; 软件开发团队通常会编写自动化测试套件来防止回归。这些测试通常是在编写应用程序功能代码之后编写的。我们将采用另一种方法&#xff1a;在实现应用程序代码之前编写测试。这称为测试驱动开发 (TDD)。 为什么要应用 TDD&#xff1f;通过在实…

后台管理系统用户退出登录方案实现

退出登录一直是一个通用的前端实现方案&#xff0c;对于退出登录而言&#xff0c;它的触发时机一般有两种&#xff1a; 1. 用户主动退出&#xff0c;即用户点击登录按钮之后退出&#xff1b; 2. 用户被动退出&#xff0c;Token过期或被 其他人"顶下来" 时退出&…

文献分享:BGE-M3——打通三种方式的嵌入模型

文章目录 1. \textbf{1. } 1. 背景与导论 1.1. \textbf{1.1. } 1.1. 研究背景 1.2. \textbf{1.2. } 1.2. 本文的研究 1.3. \textbf{1.3. } 1.3. 有关工作 2. M3-Embedding \textbf{2. M3-Embedding} 2. M3-Embedding 2.1. \textbf{2.1. } 2.1. 模型核心: 混合检索方式 2.1.1. \…

Hadoop•FinalShell连接VMware免密登录

听说这是目录哦 FinalShell连接VMware&#x1f324;️解决重连失效FinalShell的使用 免密登录⛈️能量站&#x1f61a; FinalShell连接VMware&#x1f324;️ 保持虚拟机的开机状态&#xff0c;打开FinalShell&#xff0c;如果虚拟机关机或者挂起&#xff0c;连接就会断开。 …

一个在ios当中采用ObjectC和opencv来显示图片的实例

前言 在ios中采用ObjectC编程利用opencv来显示一张图片&#xff0c;并简单绘图。听上去似乎不难&#xff0c;但是实际操作下来&#xff0c;却不是非常的容易的。本文较为详细的描述了这个过程&#xff0c;供后续参考。 一、创建ios工程 1.1、选择ios工程类型 1.2、选择接口模…

《Rust权威指南》学习笔记(五)

高级特性 1.在Rust中&#xff0c;unsafe是一种允许绕过Rust的安全性保证的机制&#xff0c;用于执行一些Rust默认情况下不允许的操作。unsafe存在的原因是&#xff1a;unsafe 允许执行某些可能被 Rust 的安全性检查阻止的操作&#xff0c;从而可以进行性能优化&#xff0c;如手…

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现

目录 1 三种多头编码&#xff08;MHE&#xff09;实现1.1 多头乘积&#xff08;MHP&#xff09;1.2 多头级联&#xff08;MHC&#xff09;1.3 多头采样&#xff08;MHS&#xff09;1.4 标签分解策略 论文&#xff1a;Multi-Head Encoding for Extreme Label Classification 作者…

docker中使用Dockerfile设置Volume挂载点

关于在docker中如何使用Volume&#xff0c;可以参考文章&#xff1a; docker中使用Volume完成数据共享-CSDN博客 如果想在生成docker镜像的时候设置好挂载点&#xff0c;而不是在运行镜像生成容器时生成。 下面以自建一个tomcat镜像为例&#xff0c;演示如何在生成镜像时设置…

springboot548二手物品交易boot代码(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统二手物品交易信息管理难度大&#xff0c;容错率低&#x…

通往O1开源之路

“Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective”由复旦大学和上海人工智能实验室的研究者撰写。该论文从强化学习视角出发&#xff0c;深入分析了实现类似OpenAI o1模型性能的路线图&#xff0c;聚焦于策略初始化、奖…

SD下载、安装、使用、卸载-Stable Diffusion整合包v4.10发布!

目录 前言概述 SD安装1、安装软件2、启动3、配置4、运行5、测试 导入SD模型【决定画风】常用模型下载安装模型 SD卸载SD文生图提示词提示词使用技巧提示词的高级使用技巧强调关键词 前言 我向来不喜欢搞一些没有用的概念&#xff0c;所以直接整理可能用到的东西。 sd简单的说…

Mac iTerm2集成DeepSeek AI

1. 去deepseek官网申请api key&#xff0c;DeepSeek 2. 安装iTerm2 AI Plugin插件&#xff0c;https://iterm2.com/ai-plugin.html&#xff0c;插件解压后直接放到和iTerms相同的位置&#xff0c;默认就在/Applications 下 3. 配置iTerm2 4. 重启iTerm2,使用快捷键呼出AI对话…

MySQL数据库笔记——多版本并发控制MVCC

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;本文详细介绍MySQL的并发控制&#xff1a;多版本并发控制MVCC。 文章目录 背景介绍数据库并发控制——锁机制悲观锁和乐观锁悲观锁乐观锁 数据库并发控制——MVCC 的引入MVCC 和锁机…

电脑里msvcr120.dll文件丢失怎样修复?

电脑里msvcr120.dll文件丢失的修复指南 在电脑的日常使用中&#xff0c;我们可能会遇到各种各样的系统文件丢失问题&#xff0c;其中msvcr120.dll文件的丢失就是较为常见的一种。作为一名在软件开发领域深耕多年的从业者&#xff0c;我将为大家详细解析msvcr120.dll文件的重要…

今日头条ip属地根据什么显示?不准确怎么办

在今日头条这样的社交媒体平台上&#xff0c;用户的IP属地信息对于维护网络环境的健康与秩序至关重要。然而&#xff0c;不少用户发现自己的IP属地显示与实际位置不符&#xff0c;这引发了广泛的关注和讨论。本文将深入探讨今日头条IP属地的显示依据&#xff0c;并提供解决IP属…