Nginx应用配置实战
Nginx通用部署
Nginx常见参数介绍
Nginx 配置文件中的指令和参数决定了它的行为。下面详细介绍一些常见的 Nginx 参数,以帮助你更好地理解和配置 Nginx。
1. worker_processes
worker_processes auto;
- 作用:设置 Nginx 处理请求的工作进程数量。
auto
会根据 CPU 的核心数自动调整,或者你可以手动设置为特定的值。 - 建议:通常将其设置为服务器 CPU 核心数,以最大化性能。如果服务器是多核的,使用
auto
是推荐做法。
2. worker_connections
worker_connections 1024;
- 作用:每个 Nginx 工作进程能够处理的最大连接数。Nginx 的最大并发连接数是
worker_processes * worker_connections
。 - 建议:如果你有大量的并发请求,适当增加该值。根据硬件和流量需求进行调整。
3. events
events {worker_connections 1024;
}
- 作用:设置与网络事件处理相关的配置,比如连接的并发数和选择的事件模型。
- 参数:
use
: 指定 Nginx 使用的事件处理模型,常见的是epoll
(Linux)或kqueue
(FreeBSD、MacOS)。worker_connections
: 如上所述,定义每个工作进程的最大连接数。
4. http
http {include /etc/nginx/mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;...
}
- 作用:HTTP 块是 Nginx 配置文件中最重要的块,包含了所有与 HTTP 相关的配置。
- 常见配置:
include /etc/nginx/mime.types
: 引入 MIME 类型配置文件,帮助 Nginx 正确地返回文件的 MIME 类型。default_type
: 设置默认的 MIME 类型,如果无法自动识别某种文件的 MIME 类型,默认会用该类型,通常为application/octet-stream
。sendfile on
: 启用 sendfile 选项,加速文件传输,建议保持开启。keepalive_timeout 65
: 设置保持连接超时时间,单位为秒,表示客户端和服务器之间空闲连接的最大持续时间。
5. server
server {listen 80;server_name example.com;...
}
- 作用:
server
块用于定义一个虚拟主机,配置不同域名或 IP 地址对应的服务器行为。 - 常见配置:
listen 80
: 监听指定的端口,80 为 HTTP 的默认端口,443 为 HTTPS 默认端口。server_name
: 定义该服务器块的域名(如example.com
),可以使用通配符,如*.example.com
,也可以使用 IP 地址。
6. location
location / {proxy_pass http://localhost:8080;...
}
- 作用:
location
指令用于匹配 URL 路径,并为该路径定义不同的处理方式。它通常用于反向代理、静态文件服务等。 - 常见配置:
proxy_pass
: 将请求代理到后端服务器。可以是本地应用或远程服务器。root
: 定义处理该路径时所使用的根目录。比如用于静态资源的存放路径。index
: 指定默认的主页文件,当访问某目录时,会默认查找的文件(如index.html
)。
7. proxy_pass
location / {proxy_pass http://localhost:8080;
}
- 作用:
proxy_pass
是 Nginx 中用于反向代理的核心指令,它将匹配到的请求转发给指定的后端服务器。 - 说明:
proxy_pass
可以代理 HTTP、HTTPS 甚至 FastCGI、uwsgi 等多种协议。
8. upstream
upstream backend {server backend1.example.com weight=5;server backend2.example.com;server 127.0.0.1:8080;
}
- 作用:
upstream
定义后端服务器集群,用于负载均衡。在proxy_pass
中可以将请求转发到upstream
定义的服务器组。 - 常见配置:
server
: 定义一个后端服务器,可以使用 IP 地址或域名。weight
: 为某个后端服务器分配更大的权重,默认值是 1。max_fails
和fail_timeout
: 控制某台后端服务器在多少次失败后被认为不可用,以及多久后再重新尝试。
9. gzip
gzip on;
gzip_types text/plain application/json;
- 作用:启用或关闭响应的压缩功能,以减少传输的数据大小,提升性能。
- 常见配置:
gzip
: 启用或禁用压缩功能,设置为on
或off
。gzip_types
: 定义哪些 MIME 类型的文件会被压缩,常见的有text/html
、application/json
等。
10. log_format
和 access_log
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
- 作用:
log_format
用于定义访问日志的记录格式,而access_log
用于指定日志的存储位置和使用的日志格式。 - 常见配置:
$remote_addr
: 记录客户端 IP 地址。$status
: 记录请求的 HTTP 状态码。$body_bytes_sent
: 记录响应内容的大小(字节数)。
11. error_log
error_log /var/log/nginx/error.log warn;
- 作用:配置错误日志文件的位置和记录级别。
- 日志级别:
debug
: 记录所有级别的日志,包括调试信息。info
: 记录一般的运行信息。notice
: 记录需要注意的事件。warn
: 记录警告信息。error
: 记录错误信息。crit
: 记录严重错误。
12. client_max_body_size
client_max_body_size 50m;
- 作用:限制客户端请求主体的最大大小。如果请求体超过这个限制,Nginx 会返回 413(Request Entity Too Large)错误。
- 建议:在上传大文件时,可以适当增加这个值。
13. keepalive_timeout
keepalive_timeout 65;
- 作用:设置客户端和服务器之间保持活动的连接的超时时间。超时后连接会被关闭。
- 建议:根据需求调整,默认 65 秒适合大多数场景。
14. listen
listen 80;
listen [::]:80;
- 作用:配置服务器监听的端口,通常是 HTTP 的 80 端口或 HTTPS 的 443 端口。
- 参数:
[::]:80
: 表示监听所有 IPv6 地址。ssl
: 用于启用 SSL/TLS 加密。
15. ssl_certificate
和 ssl_certificate_key
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
- 作用:在配置 HTTPS 时,
ssl_certificate
指定 SSL 证书的位置,ssl_certificate_key
指定私钥的位置。
16. return
return 301 https://$server_name$request_uri;
- 作用:用于执行重定向或返回特定的 HTTP 状态码。
- 参数:
301
: 返回 301 永久重定向。302
: 返回 302 临时重定向。
以上是 Nginx 配置文件中一些重要参数的详细介绍。根据你的应用场景,这些参数可以灵活组合使用,帮助你优化 Nginx 的性能和功能。
Nginx部署Java服务
Nginx 是一个轻量级、高性能的 Web 服务器,常用于反向代理、负载均衡和静态资源服务。下面详细讲解如何配置 Nginx 以部署 Java 服务。
1. 安装 Nginx
在大多数 Linux 发行版上,使用包管理器安装 Nginx:
# Ubuntu/Debian
sudo apt update
sudo apt install nginx# CentOS/RHEL
sudo yum install nginx
启动和检查 Nginx 是否正常运行:
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
2. Nginx 基础配置文件
Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf
。典型的目录结构如下:
/etc/nginx/nginx.conf
: 主配置文件/etc/nginx/conf.d/
: 存放其他虚拟主机配置/var/www/
: 默认的网站根目录
Nginx 的基本配置结构如下:
worker_processes auto;
events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;include /etc/nginx/conf.d/*.conf;
}
3. 配置反向代理(用于 Java 服务)
假设你有一个基于 Spring Boot 的 Java 应用程序运行在 http://localhost:8080
。你可以通过 Nginx 将外部请求转发给该 Java 服务。
在 /etc/nginx/conf.d/
下创建一个配置文件,如 java_app.conf
:
server {listen 80;server_name example.com; # 将其替换为你的域名或服务器IPlocation / {proxy_pass http://localhost:8080; # 代理到 Java 服务的地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}
说明:
listen 80
: 监听 HTTP 80 端口。server_name
: 配置你的域名或 IP 地址。proxy_pass
: 将请求代理到运行 Java 应用程序的本地地址(例如,localhost:8080)。proxy_set_header
: 传递客户端请求的一些信息到后端 Java 应用,比如 IP 地址和协议。
4. 配置 SSL(HTTPS)
为了保证安全,建议使用 HTTPS。可以通过 Let’s Encrypt 获取免费 SSL 证书。
安装 certbot 工具:
# Ubuntu
sudo apt install certbot python3-certbot-nginx
然后运行以下命令为你的域名获取证书:
sudo certbot --nginx -d example.com
Nginx 会自动配置 HTTPS。生成的配置大致如下:
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;location / {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}
说明:
- 443 端口用于 SSL。
- 配置 SSL 证书路径,
/etc/letsencrypt/live/
存放的是通过 Let’s Encrypt 获取的证书。 - 第二个
server
块会将所有 HTTP 请求重定向到 HTTPS。
5. Nginx 配置负载均衡
如果你的 Java 服务部署在多台服务器上,可以使用 Nginx 做负载均衡。配置示例:
upstream java_backend {server 192.168.1.10:8080;server 192.168.1.11:8080;server 192.168.1.12:8080;
}server {listen 80;server_name example.com;location / {proxy_pass http://java_backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}
说明:
upstream
块定义了一个名为java_backend
的后端服务器组,可以配置多个 IP 地址进行负载均衡。proxy_pass
将请求转发给该服务器组。
6. 常见 Nginx 命令
# 检查配置是否正确
sudo nginx -t# 重新加载 Nginx 配置
sudo systemctl reload nginx# 查看 Nginx 状态
sudo systemctl status nginx
7. 日志管理
Nginx 的访问日志和错误日志通常位于 /var/log/nginx/access.log
和 /var/log/nginx/error.log
。
可以在 server
块中自定义日志路径:
server {listen 80;server_name example.com;access_log /var/log/nginx/java_app_access.log;error_log /var/log/nginx/java_app_error.log;location / {proxy_pass http://localhost:8080;}
}
Nginx配置举例
Nginx配置websocket
在基于 STOMP 协议的 WebSocket 应用中,如果你通过 Nginx 作为反向代理来处理 HTTPS(SSL/TLS)连接,并且需要支持 WebSocket,则需要确保 Nginx 正确处理 WebSocket 升级请求,同时配置 SSL 证书来启用 HTTPS。
以下是如何在 Nginx 中配置 HTTPS,并支持基于 STOMP 协议的 WebSocket。
步骤一:准备 SSL 证书
要启用 HTTPS,首先你需要 SSL 证书。如果你没有 SSL 证书,可以使用以下方式获取:
- 自签名证书(测试使用):可以使用
openssl
工具生成自签名证书。 - Let’s Encrypt:可以通过 Let’s Encrypt 免费获取 SSL 证书(适合生产环境)。
生成自签名证书(测试使用):
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.crt
- 生成一个有效期为 365 天的自签名 SSL 证书和密钥文件,并将其存储在
/etc/nginx/ssl/
路径下。
步骤二:配置 Nginx 支持 HTTPS 和 WebSocket
配置 Nginx 来支持 HTTPS 和 WebSocket 升级请求。在 Nginx 的 server
配置块中,需要同时启用 SSL 并配置 WebSocket 的 Upgrade
和 Connection
头部。
完整的 Nginx 配置示例:
server {listen 443 ssl;server_name your-domain.com; # 替换为你的域名或服务器 IP 地址# 配置 SSL 证书ssl_certificate /etc/nginx/ssl/server.crt; # 替换为你的 SSL 证书路径ssl_certificate_key /etc/nginx/ssl/server.key; # 替换为你的 SSL 私钥路径# SSL 配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;# WebSocket 相关配置location /ws {proxy_pass http://localhost:31004; # 代理到后端 WebSocket 服务proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_read_timeout 3600;proxy_send_timeout 3600;proxy_set_header X-NginX-Proxy true;}# 通常的 HTTP/HTTPS 请求location / {proxy_pass http://localhost:8080; # 代理到你的应用服务,例如Spring Boot应用proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}# 重定向 HTTP 到 HTTPS
server {listen 80;server_name your-domain.com;location / {return 301 https://$host$request_uri; # 强制将 HTTP 重定向到 HTTPS}
}
关键配置解释:
-
SSL 证书配置:
ssl_certificate
和ssl_certificate_key
:指定 SSL 证书和私钥的路径,用于 HTTPS 加密。ssl_protocols
和ssl_ciphers
:定义支持的 SSL/TLS 协议和加密套件。
-
WebSocket 升级:
proxy_set_header Upgrade $http_upgrade;
:告诉 Nginx 将普通的 HTTP 请求升级为 WebSocket 连接。proxy_set_header Connection "Upgrade";
:确保Connection
头部被正确设置为Upgrade
。proxy_read_timeout
和proxy_send_timeout
:配置 WebSocket 连接的超时,防止连接因空闲时间过长而被关闭。
-
代理到 WebSocket 服务:
proxy_pass http://localhost:31004;
:将 WebSocket 请求代理到后端实际运行的 WebSocket 服务器(例如运行 STOMP WebSocket 的 Spring Boot 服务)。
-
HTTP 重定向到 HTTPS:
- 配置第二个
server
块,监听端口80
,将所有 HTTP 请求重定向到 HTTPS。
- 配置第二个
步骤三:配置 Spring Boot WebSocket 支持
后端 Spring Boot 项目需要正确配置 WebSocket 支持,确保 WebSocket 端点和 STOMP 协议配置一致。
Spring Boot WebSocket 配置示例:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {// 这里的 /ws 是 WebSocket 连接端点,前端需要通过这个路径连接registry.addEndpoint("/ws").setAllowedOrigins("*") // 允许跨域,或者指定域名.withSockJS(); // 如果需要兼容旧版浏览器,可以启用 SockJS}@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {// 配置消息代理config.enableSimpleBroker("/topic", "/queue");config.setApplicationDestinationPrefixes("/app");}
}
步骤四:前端 WebSocket 连接
在前端代码中,确保 WebSocket 连接使用 wss://
协议,因为你正在通过 HTTPS 加密连接。
前端示例代码:
// 使用 wss:// 进行 WebSocket 连接
const wsUrl = 'wss://your-domain.com/ws';
const socket = new WebSocket(wsUrl);// 使用 STOMP 协议
const stompClient = Stomp.over(socket);stompClient.connect({}, function (frame) {console.log('Connected: ' + frame);// 订阅消息stompClient.subscribe('/topic/messages', function (message) {console.log('Received: ' + message.body);});// 发送消息stompClient.send('/app/hello', {}, JSON.stringify({ name: 'Hello World' }));
}, function (error) {console.error('Connection error: ', error);
});
常见问题及排查:
-
SSL 证书问题:
- 如果浏览器提示 SSL 证书无效,可能是因为使用了自签名证书。为了在生产环境中避免这种情况,建议使用 Let’s Encrypt 或其他可信的 CA 机构签发的证书。
-
WebSocket 升级失败:
- 如果 Nginx 没有正确处理 WebSocket 升级,可能会导致连接失败。检查 Nginx 日志以及浏览器开发者工具中的网络请求,确保请求的
Upgrade
和Connection
头部被正确处理。
- 如果 Nginx 没有正确处理 WebSocket 升级,可能会导致连接失败。检查 Nginx 日志以及浏览器开发者工具中的网络请求,确保请求的
-
跨域问题:
- 如果前端和后端的域名或端口不一致,可能会导致跨域问题。确保 Nginx 和后端应用正确配置了
CORS
。
- 如果前端和后端的域名或端口不一致,可能会导致跨域问题。确保 Nginx 和后端应用正确配置了
-
客户端使用 HTTPS:
- 如果前端页面是通过 HTTPS 访问的,WebSocket 连接必须使用
wss://
协议,否则浏览器会阻止不安全的连接。
- 如果前端页面是通过 HTTPS 访问的,WebSocket 连接必须使用
总结
通过上述步骤,你可以在 Nginx 中配置 HTTPS,并支持基于 STOMP 协议的 WebSocket。关键在于:
- 正确处理 WebSocket 的升级请求,确保 Nginx 代理能够支持 WebSocket 连接。
- 配置 SSL 证书,以启用 HTTPS 和 WSS 加密连接。
- Spring Boot 的 WebSocket 端点配置,确保前端能够连接到正确的 WebSocket 服务。
后续配置举例持续更新中~
相关文章:
Nginx应用配置实战
Nginx通用部署 Nginx常见参数介绍 Nginx 配置文件中的指令和参数决定了它的行为。下面详细介绍一些常见的 Nginx 参数,以帮助你更好地理解和配置 Nginx。 1. worker_processes worker_processes auto;作用:设置 Nginx 处理请求的工作进程数量。auto …...
html实现倒计时
参考网址 <!DOCTYPE html> <html> <head><title>倒计时示例</title> </head> <body><h1 id"titleCountDown"></h1><div id"countdown"></div><script>// 目标日期var targetDat…...

HTMLCSS练习
1) 效果如下 2) 代码如下 2.1) HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" conte…...

LeetCode讲解篇之377. 组合总和 Ⅳ
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 总和为target的元素组合个数 可以由 总和为target - nums[j]的元素组合个数 转换而来,其中j为nums所有元素的下标 而总和target - nums[j]的元素组合个数 可以由 总和为target - nums[j] - nums[k]的…...

Midjourney中文版:创意无限,艺术之旅由此启程
Midjourney中文版——一个将你的文字想象转化为视觉艺术的神奇平台。无需繁琐的绘画技巧,只需简单的文字描述,你就能开启一场前所未有的艺术之旅。 Midjourney AI超强绘画 (原生态系统)用户端:Ai Loadinghttps://www.mjdiscord.c…...

安装R和RStudio:开始你的数据分析之旅
数据分析是当今世界中一个非常热门的领域,而R语言是进行数据分析的强大工具之一。R是一种编程语言和软件环境,用于统计计算和图形表示。RStudio是一个集成开发环境(IDE),它为R语言提供了一个更加友好和高效的工作环境。…...
如何使用python连接数据库?
数据分析离不开数据库,如何使用python连接数据库呢?听我娓娓道来哈 该笔记参考了PyMySQL官方文档和《python数据采集》关于数据存储的部分,欢迎大家去阅读原著,相信会理解的更加透彻。 补充:文末增加Oracle数据库的连…...

停车位识别数据集 图片数量12416张YOLO,xml和txt标签都有; 2类类别:space-empty,space-occupied;
YOLO停车位识别 图片数量12416张,xml和txt标签都有; 2类类别:space-empty,space-occupied; 用于yolo,Python,目标检测,机器学习,人工智能,深度学习࿰…...

MySQL 创建子账号
1. 使用 root 账号登录 MySQL 使用 root 账号登录 MySQL,登录成功如图所示: 新建一个 MySQL 子账号,新建子账号命令如下: 命令 : CREATE USER testlocalhost IDENTIFIED BY 123456;若出现如下图所示,则表示新建 MySQL…...
代码随想录 106. 岛屿的周长
106. 岛屿的周长 #include<bits/stdc.h> using namespace std;int main(){int n, m;cin >> n >> m;vector<vector<int>> mp(n, vector<int>(m, 0));for (int i 0; i < n; i){for (int j 0; j < m; j){cin >> mp[i][j];}}in…...
阿里云融合认证中的App端一键登录能力
在如今的移动互联网环境中,App端的一键登录功能逐渐成为提升用户体验的关键。用户不再需要繁琐的注册流程或输入短信验证码,一键即可通过手机号码完成登录。而阿里云融合认证中,一键登录能力为移动应用提供了一个简单、便捷且安全的用户身份验…...

基于YOLO11/v10/v8/v5深度学习的安检X光危险品检测与识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...

vue-插槽作用域实用场景
vue-插槽作用域实用场景 1.插槽1.1 自定义列表渲染1.2 数据表格组件1.3 树形组件1.4 表单验证组件1.5 无限滚动组件 1.插槽 插槽感觉知道有这个东西,但是挺少用过的,每次看到基本都会再去看一遍用法和概念。但是在项目里,自己还是没有用到过…...

Prometheus+Grafana 监控 K8S Ingress-Ningx Controller
文章目录 一、prometheus中添加ingress-nginx的服务发现配置二、ingress-nginx controller的service添加端口暴露监控指标三、grafana添加ingress-nginx controller的监控模版 ingress-nginx默认是没有开启监控指标的,需要我们在ingress-nginx controller的svc里面开…...

如何在Visual Studio 2019中创建.Net Core WPF工程
如何在Visual Studio 2019中创建.Net Core WPF工程 打开Visual Studio 2019,选择Create a new project 选择WPF App(.Net Core) 输入项目名称和位置,单击Create 这样我们就创建好了一个WPF工程 工程文件说明 Dependencies 当前项目所使用的依赖库&…...

自然语言处理(NLP)论文数量的十年趋势:2014-2024
引言 近年来,自然语言处理(NLP)已成为人工智能(AI)和数据科学领域中的关键技术之一。随着数据规模的不断扩大和计算能力的提升,NLP技术从学术研究走向了广泛的实际应用。通过观察过去十年(2014…...
.net core API中使用LiteDB
LiteDB介绍 LiteDB 是一个小巧、快速和轻量级的 .NET NoSQL 嵌入式数据库。 无服务器的 NoSQL 文档存储简单的 API,类似于 MongoDB100% 的 C# 代码支持 .NET 4.5 / NETStandard 1.3/2.0,以单个 DLL(不到 450KB)形式提供线程安全…...

YOLO_V8分割
YOLO_V8分割 YOLO安装 pip install ultralytics YOLO的数据集转化看csdn 数据标注EIseg EIseg这块,正常安装就好,但是numpy和各类包都容易有冲突,python版本装第一点 数据标注过程中,记得把JSON和COCO都点上,把自…...

根据请求错误的状态码判断代理配置问题
SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注入、命…...
Python 网络爬虫高阶用法
网络爬虫成为了自动化数据抓取的核心工具。Python 拥有强大的第三方库支持,在网络爬虫领域的应用尤为广泛。本文将深入探讨 Python 网络爬虫的高阶用法,包括处理反爬虫机制、动态网页抓取、分布式爬虫以及并发和异步爬虫等技术。以下内容结合最新技术发展…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...