Nginx 核心配置详解与性能优化最佳实践
1.什么是 Nginx?
Nginx 是一个高性能的 Web 服务器和反向代理服务器。它轻量、高效,被广泛用于现代 Web 开发中。
2.为什么前端需要了解 Nginx? ★ 了解
-
本地开发:可以模拟生产环境
-
部署前端项目:作为静态文件服务器
-
解决跨域问题:配置代理
-
性能优化:启用压缩、缓存等
3.基本使用场景 ★ 基础
1. 作为静态文件服务器
这是最简单的用法,用来托管你的 HTML、CSS、JS 等静态文件。
示例配置:
server {listen 80;server_name localhost;location / {root /path/to/your/project;index index.html;}
}
2. 解决跨域问题(开发环境)
在开发时,前端经常需要请求后端 API,可能会遇到跨域问题。Nginx 可以配置代理:
server {listen 80;server_name localhost;location / {root /path/to/your/project;index index.html;}location /api/ {proxy_pass http://backend-server:port/;}
}
3. 配置 HTTPS
现代网站基本都使用 HTTPS,Nginx 可以轻松配置:
server {listen 443 ssl;server_name yourdomain.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;location / {root /path/to/your/project;index index.html;}
}
4.Nginx 核心配置 ★ 基础
一、基础结构
# 全局块(影响整个Nginx运行的配置)
user nginx; # 运行用户
worker_processes auto; # 工作进程数(通常设为CPU核心数)
error_log /var/log/nginx/error.log warn; # 错误日志路径和级别# 事件块(连接处理配置)
events {worker_connections 1024; # 每个worker的最大连接数use epoll; # Linux高性能事件模型
}# HTTP块(核心配置区域)
http {include /etc/nginx/mime.types; # 文件扩展名与MIME类型映射default_type application/octet-stream; # 默认MIME类型# 其他HTTP全局配置...# Server块(虚拟主机配置)server {listen 80; # 监听端口server_name example.com; # 域名# Location块(URI路由配置)location / {root /var/www/html; # 根目录index index.html; # 默认文件}}
}
二、核心功能配置
1. 静态资源服务
server {location /static/ {alias /data/static/; # 路径映射(注意末尾斜线)expires 30d; # 缓存时间access_log off; # 关闭访问日志}location ~* \.(jpg|png|gif)$ {root /data/images;# 图片防盗链valid_referers none blocked *.example.com;if ($invalid_referer) {return 403;}}
}
2. 反向代理
location /api/ {proxy_pass http://backend_server/; # 末尾斜线会去除/api前缀# 关键代理头设置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_connect_timeout 75s;proxy_read_timeout 300s;# 缓冲区优化proxy_buffer_size 4k;proxy_buffers 8 16k;
}
3. 负载均衡
upstream backend {least_conn; # 最少连接算法server 10.0.0.1:8080 weight=5;server 10.0.0.2:8080;server backup.example.com:8080 backup;# 健康检查(需nginx-plus或第三方模块)# health_check interval=5s;
}
4. HTTPS配置
server {listen 443 ssl http2;server_name example.com;ssl_certificate /etc/ssl/certs/example.com.crt;ssl_certificate_key /etc/ssl/private/example.com.key;# 安全增强配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# HSTS头(强制HTTPS)add_header Strict-Transport-Security "max-age=63072000" always;
}
三、高级配置技巧
1. 路径重写
location /old/ {rewrite ^/old/(.*)$ /new/$1 permanent; # 301重定向
}# 条件重写
if ($http_user_agent ~* "bot") {rewrite ^(.*)$ /bot-page.html break;
}
2. 访问控制
location /admin/ {allow 192.168.1.0/24; # 允许内网IPdeny all; # 拒绝其他所有auth_basic "Restricted"; # 基础认证auth_basic_user_file /etc/nginx/.htpasswd;
}
3. 性能优化
# 全局配置
sendfile on; # 零拷贝传输
tcp_nopush on; # 优化数据包发送
keepalive_timeout 65; # 长连接超时# Gzip压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1k;
gzip_comp_level 6;
4. 日志定制
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 buffer=32k flush=5m;
四、调试与维护
1. 配置检查
nginx -t # 测试配置文件语法
nginx -T # 测试并打印有效配置
2. 常用命令
nginx -s reload # 平滑重载配置
nginx -s reopen # 重新打开日志文件
kill -USR2 `cat /var/run/nginx.pid` # 热升级
3. 变量参考
| 变量 | 说明 |
|---|---|
|
| 请求的主机名 |
|
| 完整请求URI |
|
| 查询字符串 |
|
| 客户端UA信息 |
|
| 后端响应时间 |
5.Nginx location 匹配规则详解 ★ 重要
location 指令是 Nginx 配置中最核心的部分之一,它决定了如何处理不同的 URI 请求。下面我将全面讲解 location 的匹配规则和使用方法。
4.1、location 语法基础 ★ 重要
基本语法:
location [修饰符] 匹配模式 {# 配置指令
}
4.2、匹配规则优先级 ★ 重要
Nginx 的 location 匹配遵循以下优先级顺序:
| 匹配类型 | 符号 | 优先级 | 匹配规则 | 是否继续搜索其他 location |
|---|---|---|---|---|
| 精确匹配 |
| 1 | URI 必须完全一致 | ❌ 立即停止 |
| 前缀优先匹配 |
| 2 | URI 以指定模式开头(最长匹配原则) | ❌ 不再检查正则 |
| 正则匹配 |
| 3 | 区分大小写的正则匹配(按配置文件顺序) | ✔️ 按顺序继续 |
| 正则匹配 |
| 3 | 不区分大小写的正则匹配(按配置文件顺序) | ✔️ 按顺序继续 |
| 普通前缀匹配 | 无符号 | 4 | URI 以指定模式开头(遵循最长匹配原则) | ✔️ 会继续检查正则 |
| 通用匹配 |
| 5 | 匹配所有请求 | ❌ 最终兜底 |
🔍 匹配流程说明(重点) ★ 重要
-
先检查精确匹配 (
=) → 命中则立即停止 -
检查所有普通前缀匹配 → 记录最长匹配项
-
如果最长匹配有
^~→ 直接使用,停止搜索 -
否则暂存这个结果,继续后续检查
-
-
按顺序检查正则匹配 (
~/~*) → 第一个命中的正则立即生效 -
如果前面都未命中 → 使用之前暂存的普通前缀匹配
-
最终回退 → 使用
location //* * 注意的是,nginx的匹配优先顺序按照上面的顺序进行优先匹配,而且注意的是一旦某一个匹配命/中直接退出,不再进行往下的匹配剩下的普通匹配会按照最长匹配长度优先级来匹配,就是谁匹配的越多就用谁 */ server {# 1. 精确匹配(最高优先级)location = /login {return 401 "请先登录";}# 2. 前缀优先匹配(第二优先级)location ^~ /static/ {root /data;}# 3. 正则匹配(第三优先级)location ~ /user/\d+ {proxy_pass http://backend;}# 4. 普通前缀匹配(第四优先级)location /documents/ {alias /docs/;}# 5. 通用匹配(最低优先级)location / {try_files $uri $uri/ =404;} }
4.3、匹配类型详解 ★ 重要
1. 精确匹配 (=) ★ 重要
location = /exact/match {# 只有当请求URI完全等于"/exact/match"时才会匹配
}
特点:
-
完全匹配时才生效
-
匹配成功后立即停止搜索其他location
-
效率最高
2. 前缀匹配 (^~) ★ 重要
location ^~ /static/ {# 匹配以/static/开头的URI
}
特点:
-
匹配前缀后不再检查正则表达式
-
比正则匹配优先级高
3. 正则匹配 (~ 和 ~*) ★ 重要
location ~ \.php$ {# 区分大小写的正则匹配.php结尾的URI
}location ~* \.(jpg|png|gif)$ {# 不区分大小写的正则匹配图片文件
}
特点:
-
~区分大小写 -
~*不区分大小写 -
按配置文件中出现的顺序匹配
4. 普通前缀匹配 ★ 重要
location /prefix {# 匹配以/prefix开头的URI
}
特点:
-
遵循最长匹配原则
-
如果最长匹配不是^~或=,还会检查正则匹配
5. 通用匹配 (/) ★ 重要
location / {# 匹配所有请求
}
特点:
-
最低优先级
-
当没有其他location匹配时使用
4.4、匹配示例分析
server {location = / {# 精确匹配首页}location ^~ /images/ {# 匹配/images/下的所有文件}location ~* \.(gif|jpg|jpeg)$ {# 匹配所有图片文件}location /documents/ {# 匹配/documents/下的文件}location / {# 通用匹配}
}
6.History 模式(前端路由支持) ★ 重要
问题背景:
Vue/React 等 SPA 项目使用 history.pushState 时,刷新页面会导致 404(因为服务器没有对应的真实路径)。
Nginx 解决方案:
server {listen 80;server_name yourdomain.com;location / {root /path/to/your/spa;index index.html;# 关键配置:所有非静态文件请求都返回 index.htmltry_files $uri $uri/ /index.html;}
}
原理:
-
try_files会按顺序检查请求路径是否存在 -
如果都不存在,最终返回
/index.html,由前端处理路由
7.跨域处理(CORS) ★ 重要
问题背景:
前端访问不同域名/端口的 API 时,浏览器会阻止请求。
Nginx 解决方案:
location /api/ {# 代理到真实后端proxy_pass http://backend-server:8080/;# 添加跨域头add_header 'Access-Control-Allow-Origin' '$http_origin';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'Content-Type,Authorization';add_header 'Access-Control-Allow-Credentials' 'true';# 预检请求处理if ($request_method = 'OPTIONS') {return 204;}
}
8.缓存控制 ★ 重要
1. 静态资源缓存
2. 禁用缓存(适合 HTML 文件)
3. 代理缓存(反向代理场景)
9.反向代理 ★ 重要
典型场景:
-
前端请求
/api转发到后端服务 -
负载均衡多台服务器
基础配置
location /api/ {proxy_pass http://backend-server:8080/; # 末尾/会去除/api前缀# 常用代理头设置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_connect_timeout 60s;proxy_read_timeout 60s;
}
负载均衡示例
upstream backend {server 10.0.0.1:8000 weight=3; # 权重3server 10.0.0.2:8000;server 10.0.0.3:8000 backup; # 备用服务器
}location / {proxy_pass http://backend;
}
10.关键点总结
| 功能 | 核心指令/配置 | 注意事项 |
|---|---|---|
| History模式 | try_files $uri $uri/ /index.html | 需要前端路由配合 |
| 跨域 | add_header 'Access-Control-*' | 复杂请求需处理 OPTIONS 预检 |
| 缓存 | expires + Cache-Control | 静态/动态资源策略不同 |
| 反向代理 | proxy_pass + proxy_set_header | 注意路径末尾/是否保留前缀 |
实际使用时,建议通过 nginx -t 测试配置后再重载服务。
11.以目录去区分多个history单文件 ★ 重要
因为不可能每一个项目开启一个域名,仅仅指向通过增加路径来划分多个网站,比如:
-
www.taobao.com/tmall/login访问天猫的登录页面 -
www.taobao.com/alipay/login访问支付宝的登录页面server {listen 80;server_name taobao.com;index index.html index.htm;# 通过正则来匹配捕获 [tmall|alipay]中间的这个路径location ~ ^/([^\/]+)/(.*)$ {try_files $uri $uri/ /$1/dist/index.html =404;} }
12.负载均衡 ★ 重要
基于upstream做负载均衡,中间会涉及一些相关的策略比如ip_hash、weight
upstream backserver{ # 哈希算法,自动定位到该服务器 保证唯一ip定位到同一部机器 用于解决session登录态的问题ip_hash; server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载) server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大) server 127.0.0.1:6060; server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
}
13.灰度部署 ★ 重要
如何根据headers头部来进行灰度,下面的例子是用cookie来设置,如何获取头部值在nginx中可以通过$http_xxx来获取变量
upstream stable {server xxx max_fails=1 fail_timeout=60;server xxx max_fails=1 fail_timeout=60;}
upstream canara {server xxx max_fails=1 fail_timeout=60;
}server {listen 80;server_name xxx;# 设置默认set $group "stable";# 根据cookie头部设置接入的服务if ($http_cookie ~* "tts_version_id=canara"){set $group canara;}if ($http_cookie ~* "tts_version_id=stable"){set $group stable;}location / {proxy_pass http://$group;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;index index.html index.htm;}
}
14.优雅降级 ★ 重要
常用于ssr的node服务挂了返回500错误码然后降级到csr的cos桶或者nginx中,优雅降级主要用error_page参数来进行降级指向备用地址。
upstream ssr {server xxx max_fails=1 fail_timeout=60;server xxx max_fails=1 fail_timeout=60;}
upstream csr {server xxx max_fails=1 fail_timeout=60;server xxx max_fails=1 fail_timeout=60;
}location ^~ /ssr/ {proxy_pass http://ssr;# 开启自定义错误捕获 如果这里不设置为on的话 会走向nginx处理的默认错误页面proxy_intercept_errors on;# 捕获500系列错误 如果500错误的话降级为下面的csr渲染error_page 500 501 502 503 504 = @csr_location# error_page 500 501 502 503 504 = 200 @csr_location# 注意这上面的区别 等号前面没有200 表示 最终返回的状态码已 @csr_location为准 加了200的话表示不管@csr_location返回啥都返回200状态码
}location @csr_location {# 这时候地址还是带着/ssr/的要去除rewrite ^/ssr/(.*)$ /$1 break;proxy_pass http://csr;rewrite_log on;
}
15.webp根据浏览器自动降级为png ★ 重要
这套方案不像常见的由nginx把png转为webp的方案,而是先经由图床系统(node服务)上传两份图片:
-
一份是原图png
-
一份是png压缩为webp的图片(使用的是imagemin-webp)
然后通过nginx检测头部是否支持webp来返回webp图片,不支持的话就返回原图即可。这其中还做了错误拦截,如果cos桶丢失webp图片及时浏览器支持webp也要降级为png
http {include /etc/nginx/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"''"$proxy_host" "$upstream_addr"';access_log /var/log/nginx/access.log main;sendfile on;keepalive_timeout 65;# 开启gzipgzip on;gzip_vary on;gzip_proxied any;gzip_comp_level 6;gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;# 负载均衡 这里可以是多个cos桶地址即可upstream static_env {server xxx;server xxx;}# map 设置变量映射 第一个变量指的是要通过映射的key值 Accpet 第二个值的是变量别名map $http_accept $webp_suffix {# 默认为 空字符串default "";# 正则匹配如果Accep含有webp字段 设置为.webp值"~*webp" ".webp";}server {listen 8888;absolute_redirect off; #取消绝对路径的重定向#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。root /usr/share/nginx/html;location / {index index.html index.htm;proxy_set_header Host $host;try_files $uri $uri/ /index.html;add_header Cache-Control 'no-cache, max-age=0';}# favicon.icolocation = /favicon.ico {log_not_found off;access_log off;}# robots.txtlocation = /robots.txt {log_not_found off;access_log off;}# location ~* \.(png|jpe?g)$ {# Pass WebP support header to backend# 如果header头部中支持webpif ($webp_suffix ~* webp) {# 先尝试找是否有webp格式图片rewrite ^/(.*)\.(png|jpe?g)$ /$1.webp break;# 找不到的话 这里捕获404错误 返回原始错误 注意这里的=号 代表最终返回的是@static_img的状态吗error_page 404 = @static_img;}proxy_intercept_errors on;add_header Vary Accept;proxy_pass http://static_env;proxy_set_header Host $http_host;expires 7d;access_log off;}location @static_img {#set $complete $schema $server_addr $request_uri;rewrite ^/.+$ $request_uri break;proxy_pass http://static_env;proxy_set_header Host $http_host;expires 7d;}# assets, medialocation ~* \.(?:css(\.map)?|js(\.map)?|gif|svg|jfif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {proxy_pass http://static_env;proxy_set_header Host $http_host;expires 7d;access_log off;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}
}
16.nginx常用指令 ★ 基础
Nginx 主程序参数
| 指令 | 说明 | 示例 |
|---|---|---|
|
| 显示帮助信息 |
|
|
| 显示版本信息 |
|
|
| 显示版本和配置参数 |
|
|
| 测试配置文件语法 |
|
|
| 测试配置并打印有效配置 |
|
|
| 测试配置时不显示非错误信息 |
|
|
| 发送信号到主进程 |
|
|
| 设置前缀路径 |
|
|
| 指定配置文件 |
|
|
| 设置全局指令 |
|
进程管理信号(-s 参数)
| 信号 | 说明 | 示例 |
|---|---|---|
|
| 立即停止 |
|
|
| 优雅停止 |
|
|
| 重载配置 |
|
|
| 重新打开日志 |
|
Windows 实用命令
| 命令 | 说明 | 示例 |
|---|---|---|
|
| 强制终止所有 Nginx 进程 | - |
|
| 检查 Nginx 进程 | - |
|
| 创建 Windows 服务 | - |
|
| 启动 Nginx 服务 | - |
|
| 停止 Nginx 服务 | - |
环境管理命令
| 命令 | 说明 |
|---|---|
|
| 设置环境变量 |
|
| 添加 PATH |
调试命令
| 命令 | 说明 |
|---|---|
|
| 输出错误到日志 |
|
| 指定错误日志路径 |
注:
-
所有命令需在 CMD 中执行
-
建议在 Nginx 安装目录下操作
-
修改配置后务必测试语法:
nginx -t -
服务管理命令需管理员权限
相关文章:
Nginx 核心配置详解与性能优化最佳实践
1.什么是 Nginx? Nginx 是一个高性能的 Web 服务器和反向代理服务器。它轻量、高效,被广泛用于现代 Web 开发中。 2.为什么前端需要了解 Nginx? ★ 了解 本地开发:可以模拟生产环境 部署前端项目:作为静态文件服务器…...
机器学习的一百个概念(7)独热编码
前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…...
用LLama factory时报类似Process 2504721 got signal: 1的解决方法
之前用nohup来远程跑LLama factory微调脚本,是没有问题的,但今天发现运行类似下面这个命令时, nohup llamafactory-cli train examples/train_qlora/qwen_lora.yaml 只要一关闭ssh session,就会终止训练,报类似&…...
解决 Git 通过 SSH 克隆仓库时自动转换为 HTTPS 的问题
解决 Git 通过 SSH 克隆仓库时自动转换为 HTTPS 的问题 在使用 Git 通过 SSH 协议克隆私有仓库时,如果遇到类似以下错误: fatal: unable to access https://itlab.stack.net:stack.git/: Could not resolve host: gitlab.stack这通常是因为 Git 配置错…...
从实用的角度聊聊Linux下文本编辑器VIM
本文从实用的角度聊聊Vim的常用命令。何为实用?我举个不实用的例子大家就明白了,用vim写代码。;) “vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成…...
多电机显示并排序
多电机显示并排序 要实现根据后端传递过来的驱动电机数据的数量来显示不同数量的数据列表,我们可以使用 Vue 的 v-for 指令来遍历 driveMotorData 数组,并为每个驱动电机生成一个数据列表。这样,无论后端传来多少个驱动电机的数据࿰…...
佳能imageRUNNER 2206N基本参数及管理员密码
基本参数: 产品类型 激光数码复合机 颜色类型 黑白 涵盖功能 复印/打印/扫描 速度类型 低速 最大原稿尺寸 A3 复印/打印方式 激光静电转印方式 感光材料 OPC 显影系统 干式单组分显影 定影…...
社交类 APP 设计:打造高用户粘性的界面
在当今数字化时代,社交类APP已成为人们日常生活中不可或缺的一部分。然而,随着市场竞争的加剧,如何通过设计提升用户粘性成为社交类APP成功的关键。本文将从设计的关键要素、用户界面优化、功能创新、个性化体验以及持续优化等方面࿰…...
数据编排与Dagster:解锁现代数据管理的核心工具
在数据驱动的时代,如何高效管理复杂的数据管道、确保数据质量并实现团队协作?本文深入探讨数据编排的核心概念,解析其与传统编排器的差异,并聚焦开源工具Dagster如何以“资产为中心”的理念革新数据开发流程,助力企业构…...
网络安全中的“后门”:概念、类型、作用与攻防技术
目录 什么是后门? 后门的常见类型 2.1 按植入方式分类 2.2 按功能分类 后门在安全测试中的作用 后门的玩法与免杀技术 4.1 常见后门技术 4.2 如何实现免杀(Bypass AV) 如何检测和防御后门? 总结 1. 什么是后门ÿ…...
AI | 大模型入门介绍
以下是关于AI大模型中蒸馏、量化、MoE和MHA技术的介绍: 1. 模型蒸馏(Model Distillation) • 定义:模型蒸馏是一种将大型复杂模型(教师模型)的知识转移到小型简单模型(学生模型)的技…...
Jmeter的压测使用
Jmeter基础功能回顾 一、创建Jmeter脚本 1、录制新建 (1)适用群体:初学者 2、手动创建 (1)需要了解Jmeter的常用组件 元件:多个类似功能组件的容器(类似于类) 各元件作用 组件…...
kubernetes》》k8s》》Deployment》》ClusterIP、LoadBalancer、Ingress 内部访问、外边访问
Nginx部署 K8s 集群内外访问服务的方式 节点 Kubernetes 集群中的服务器(指单台) 集群 Kubernetes 管理的一组服务器的集合 边界路由器 为局域网和Internet路由数据包的路由器,执行防火墙保护局域网络 集群网络 遵循Kubernetes网络模型实现集…...
Transformer 通关秘籍8:词向量如何表示近义词?
上一节已经完成了 token 到词向量的转换。那么,使用转换后的词嵌入向量便可以表示 token 之间的语义了吗?便可以表示两个单词是否是近义词,是否是反义词了吗? 是的。 接下来先通过一个例子,来直观地理解一下词嵌入向…...
Vue + Scss项目中实现自定义颜色主题的动态切换
当时面试的时候遇到面试官问的一个问题如何实现自定义颜色主题切换,当时我做的只是elementUIPlus提供的暗黑和默认主题切换 theme.scss // 增加自定义主题类型 $themes: (light: (/* 原有配置保持不变 */),dark: (/* 原有配置保持不变 */),custom: () // 空映射…...
搭建qemu环境
1.安装qemu apt install qemu-system2.编译内核 设置gcc软链接sudo ln -s arm-linux-gnueabihf-gcc arm-linux-gccsudo ln -s arm-linux-gnueabihf-ld arm-linux-ldsudo ln -s arm-linux-gnueabihf-nm arm-linux-nmsudo ln -s arm-linux-gnueabihf-objcopy arm-linux-objc…...
【MVC简介-产生原因、演变历史、核心思想、组成部分、使用场景】
MVC简介 产生原因: MVC(Model-View-Controller)模式诞生于20世纪70年代,由Trygve Reenskaug在施乐帕克研究中心(Xerox PARC)为Smalltalk语言设计,目的是解决图形用户界面(GUI&…...
基于NebulaGraph构建省市区乡镇街道知识图谱(二)
上次我们有讲到构建知识图谱,但是在实际使用的时候会发现某些乡镇街道丢失的问题,因为VID必须全局唯一,覆盖导致原因,另外在全国大批量导入时速度非常慢,为此,我们重新优化表结构与导入语法。 1. 表及索引…...
论文浅尝 | Interactive-KBQA:基于大语言模型的多轮交互KBQA(ACL2024)
转载至:何骏昊 开放知识图谱 原文地址:论文浅尝 | Interactive-KBQA:基于大语言模型的多轮交互KBQA(ACL2024) 笔记整理:何骏昊,东南大学硕士,研究方向为语义解析 论文链接ÿ…...
线性规划工具推荐篇 开源+商用 按需取用
一、开源免费工具 1. GLPK (GNU Linear Programming Kit) 特点: 支持线性规划(LP)、混合整数规划(MIP)使用MathProg语言建模,可通过glpsol命令行求解适合中小规模问题,性能低于商业求解器 适用…...
linux -- php 扩展之xlswriter
xlswriter - PHP 最强性能 Excel 扩展 linux 安装 完整编译安装步骤 ## 下载wget https://pecl.php.net/get/xlswriter tar -zxvf xlswriter cd xlswriterphpize # 执行配置 ./configure # 编译 make make install ./configure 如果报错,就指定配置路径 …...
Dockerfile文件构建镜像Anaconda+Python教程
文章目录 前言Dockerfile 核心模块解析**一、Dockerfile基础镜像选择二、系统基础配置1、时区设置2、镜像源替换 三、系统依赖安装四、复制本地文件五、指定路径六、Anaconda环境配置1、anaconda环境安装2、配置虚拟环境3、创建conda虚拟环境4、启动和安装环境 七、完整dockerf…...
本地部署大模型-web界面(ollama + open-webui)
一、安装ollama 二、安装部署open-webui 1、项目运行环境 (1)配置python环境—官方下载链接 可通过命令行直接更改python镜像源为阿里云镜像源: >pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/也可手动修…...
Uniapp 实现微信小程序滑动面板功能详解
文章目录 前言一、功能概述二、实现思路三、代码实现总结 前言 Uniapp 实现微信小程序滑动面板功能详解 一、功能概述 滑动面板是移动端常见的交互组件,通常用于在页面底部展开内容面板。本文将介绍如何使用 Uniapp 开发一个支持手势滑动的底部面板组件࿰…...
redis一些常用的命令(1)
启动redis redis-server /home/XXX/myredis/redis.conf 默认不是后台运行的,修改配置文件,daemonized on /var/run/redis.pid when daemonized port 6380 默认端口的6379 bind:127.0.0.1 默认是本地 连接不同的端口 redis-cli -p 6380 制…...
Java虚拟机JVM知识点(已完结)
JVM内存模型 介绍下内存模型 根据JDK8的规范,我们的JVM内存模型可以拆分为:程序计数器、Java虚拟机栈、堆、元空间、本地方法栈,还有一部分叫直接内存,属于操作系统的本地内存,也是可以直接操作的。 详细解释一下 程…...
【C++进阶四】vector模拟实现
目录 1.构造函数 (1)无参构造 (2)带参构造函数 (3)用迭代器构造初始化函数 (4)拷贝构造函数 2.operator= 3.operator[] 4.size() 5.capacity() 6.push_back 7.reserve 8.迭代器(vector的原生指针) 9.resize 10.pop_back 11.insert 12.erase 13.memcpy…...
VUE3+Mapbox-GL 实现鼠标绘制矩形功能的详细代码和讲解
以下是如何使用 Mapbox GL JS 实现鼠标绘制矩形功能的详细代码和讲解。Mapbox GL JS 是一个强大的 JavaScript 库,可以用来创建交互式地图。下面将通过监听鼠标事件并动态更新地图图层来实现这一功能。 实现步骤 初始化地图 在 HTML 文件中引入 Mapbox GL JS 库&…...
《筋斗云的K8s容器化迁移》
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 文章目录 **第一章:斗战胜佛的延迟焦虑****第二章:微服务化的紧箍咒****第三章:混沌中的流量劫持****第四章:量子筋斗的终极形态****终章&…...
面试遇到的几个问题小记20250401
一、echarts设置数据的几种方式 在 ECharts 里,设置数据存在多种方式,下面为你详细介绍: 在初始化配置项时设置数据 这是最为常见的方式,也就是在创建 ECharts 实例的时候,于配置项 option 里直接设置数据。 // 基于…...
