深入理解Nginx:从基础配置到高级优化
什么是Nginx?
Nginx(发音为“Engine-X”)是一个高性能的HTTP和反向代理服务器,同时也可以作为邮件代理服务器和通用的TCP/UDP代理服务器。Nginx以其高并发处理能力、稳定性和灵活的配置闻名,是现代Web开发和部署的核心组件之一。
一、Nginx的核心特点
-
高并发处理能力
Nginx采用事件驱动的架构,支持大量并发连接,适合高流量的网站和应用。 -
负载均衡
Nginx内置强大的负载均衡功能,可以将请求分发到多个后端服务器。 -
反向代理
提供反向代理功能,将用户请求转发给后端服务器,并将响应返回给用户。 -
静态资源服务
高效地处理静态文件,如HTML、CSS、JavaScript和图片。 -
模块化设计
支持动态加载模块,方便扩展功能。
二、Nginx安装与基本配置
1. 安装Nginx
-
Ubuntu/Debian
sudo apt update sudo apt install nginx -
CentOS/RHEL
sudo yum install epel-release sudo yum install nginx -
Windows
前往Nginx官网下载Windows版本。
2. 启动Nginx服务
sudo systemctl start nginx
-
查看Nginx运行状态:
sudo systemctl status nginx -
停止Nginx服务:
sudo systemctl stop nginx
3. 配置文件结构
Nginx的配置文件通常位于/etc/nginx/nginx.conf,主要包括以下几个部分:
- 全局块:定义全局配置,如用户权限、进程数等。
- HTTP块:管理HTTP服务,包括服务器、负载均衡等。
- Server块:定义虚拟主机配置,如域名、端口、根目录等。
- Location块:用于定义具体的URL路径的处理规则。
三、Nginx基础配置示例
1. 配置一个简单的Web服务器
编辑/etc/nginx/nginx.conf文件:
server {listen 80;server_name example.com;root /var/www/html;index index.html;location / {try_files $uri $uri/ =404;}
}
- 解释:
listen 80: 监听80端口。server_name: 绑定域名。root: 定义站点的根目录。index: 指定默认首页文件。
2. 配置反向代理
server {listen 80;server_name example.com;location / {proxy_pass http://127.0.0.1:5000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
- 解释:
proxy_pass: 将请求转发到后端服务器。proxy_set_header: 设置请求头信息。
3. 配置负载均衡
http {upstream backend {server 192.168.1.101;server 192.168.1.102;}server {listen 80;server_name example.com;location / {proxy_pass http://backend;}}
}
- 解释:
upstream: 定义后端服务器组。proxy_pass: 指定负载均衡组。
四、Nginx日志管理
Nginx默认生成访问日志和错误日志,日志文件位于/var/log/nginx/目录。
1. 自定义日志格式
http {log_format custom_format '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent"';access_log /var/log/nginx/access.log custom_format;
}
- 解释:
log_format: 定义日志格式。access_log: 指定访问日志文件及其格式。
2. 分析日志
结合工具(如goaccess)分析Nginx日志:
sudo apt install goaccess
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
五、Nginx高级功能
1. 配置HTTPS
使用Let’s Encrypt生成免费SSL证书:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
2. 配置缓存
location / {proxy_pass http://127.0.0.1:5000;proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;proxy_cache my_cache;add_header X-Cache-Status $upstream_cache_status;
}
- 解释:
proxy_cache_path: 配置缓存目录及缓存策略。proxy_cache: 启用缓存。X-Cache-Status: 返回缓存状态。
3. 配置静态资源
server {location /static/ {root /var/www/html;expires 7d;}
}
- 解释:
expires: 设置缓存过期时间,提高静态资源加载效率。
六、Nginx性能优化
1. 调整工作进程数
在全局块中设置:
worker_processes auto;
worker_connections 1024;
- 解释:
worker_processes: 自动根据CPU核心数分配工作进程。worker_connections: 每个工作进程的最大连接数。
2. 启用Gzip压缩
http {gzip on;gzip_types text/plain text/css application/json application/javascript;gzip_min_length 1024;
}
- 解释:
gzip: 启用Gzip压缩。gzip_types: 指定需要压缩的文件类型。
3. 减少DNS查询
通过缓存DNS查询结果提升性能:
http {resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 5s;
}
七、Nginx常见问题及解决
1. 启动失败
- 原因:配置文件语法错误。
- 解决:检查语法:
sudo nginx -t
2. 502 Bad Gateway
- 原因:后端服务未启动或无法访问。
- 解决:检查后端服务器状态,确保
proxy_pass地址正确。
3. 页面显示404错误
- 原因:静态文件路径或根目录配置错误。
- 解决:检查
root和location配置。
八、总结
Nginx作为现代Web服务器和反向代理的佼佼者,具备丰富的功能和极高的性能。本篇文章从基础安装到高级配置,涵盖了Nginx的核心使用场景和优化技巧。掌握Nginx,不仅可以提升网站性能,还能为复杂应用提供灵活的解决方案。
下一步建议:实践本文的配置示例,结合自己的项目需求,深入挖掘Nginx的潜力。
相关文章:
深入理解Nginx:从基础配置到高级优化
什么是Nginx? Nginx(发音为“Engine-X”)是一个高性能的HTTP和反向代理服务器,同时也可以作为邮件代理服务器和通用的TCP/UDP代理服务器。Nginx以其高并发处理能力、稳定性和灵活的配置闻名,是现代Web开发和部署的核心…...
ONLYOFFICE8.2版本测评,团队协作的办公软件
文章目录 引言ONLYOFFICE产品简介功能与特点1. 实时协作2. 兼容性3. 模板库4. 评论和修订5. 安全性 体验与测评功能测试 邀请用户使用项目介绍结尾了解更多 引言 在数字化办公的浪潮中,效率和协作成为了工作的核心。ONLYOFFICE作为一个强大的办公套件,正…...
spring 和 grpc 的整合
spring 和 grpc 的整合 首先我们要知道 grpc 中我们在使用的时候用到了 grpc 的那些东西 dil 的编写serverimplserverbuilder addService 客户端的 stub 编写 这里面我们看一下我们那些地方可能需要 spring 帮我们管理,那些地方我们需要自己来管理呢?…...
企业项目级IDEA设置类注释、方法注释模板(仅增加@author和@date)
文章目录 前言一 设置类注释1.1 添加模板1.2 复制配置 二 设置方法注释2.1 添加模版2.2 设置模版2.3 设置参数变量2.4 配置对应快捷键2.5 配置对应作用域2.6 使用方式 说明 前言 公司代码规范中,需要在标准JavaDoc注释的基础上加上作者和日期。网上虽然有很多现成的…...
1 设计模式原则之开闭原则
一、开闭原则 1.定义 开闭原则:对扩展开放,对修改关闭。 2.具体用法 在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。 想要达到这…...
前端大环境
需求增长: 数字化转型推动:企业和组织的数字化转型进程不断加快,对前端开发的需求持续增加。无论是企业官网、电子商务平台、在线办公系统还是各种移动端应用,都需要专业的前端开发来打造良好的用户界面和交互体验。新兴技术和平台…...
Electron: 主进程和渲染进程之间通信
// 渲染进程 向 主进程 异步通信// preload.js 预加载 const {ipcRenderer} require(electron) ipcRenderer.send(on-send-event, 这里是需要传递的参数) // 第一步ipcRenderer.on(on-resend-event, (e, data) > {console.log(data) // 打印的是ipcMain.on传递过来的参数&a…...
社交电商的优势及其与 AI 智能名片小程序、S2B2C 商城系统的融合发展
摘要:本文深入分析了社交电商相较于传统电商的优势,包括门槛低、易操作、更生活化和可团队化运作等特点。同时,探讨了 AI 智能名片小程序和 S2B2C 商城系统在社交电商发展中的作用,以及它们与社交电商融合所带来的新机遇和发展前景…...
蓝桥杯c++算法学习【4】之简单数论(阶乘约数、求值、循环小数、等差数列、最大比例:::非常典型的必刷例题!!!)
别忘了请点个赞收藏关注支持一下博主喵!!!! 关注博主,更多蓝桥杯nice题目静待更新:) 简单数论 一、阶乘约数 【问题描述】 定义阶乘n!123...n。 请问100! (100 的阶乘)有多少个正约数。 【答案提交】 这…...
重构代码之删除对参数的赋值
删除对参数的赋值 是一种重构技术,旨在消除对方法参数的重新赋值。这种实践可以增强代码的可读性和维护性,避免潜在的副作用。以下是详细讲解: 一、动机 保护参数的意图:方法参数通常表示传入数据或状态。如果重新赋值ÿ…...
Docker的基本概念、安装步骤以及一些简单的用法
Docker 是一种开源的容器化平台,允许开发者打包应用及其依赖项到一个可移植的容器中。容器可以在任何支持Docker的环境中运行,这使得应用的部署和管理变得更加简单和高效。 1. Docker的基本概念 在深入学习Docker之前,了解一些基本概念是很…...
VuePress v2 快速搭建属于自己的个人博客网站
目录 为什么用VuePress? 一、前期准备 Node.js 使用主题快速开发 二、VuePress安装 三、个性化定制 修改配置信息 删除不需要的信息 博客上传 四、部署 使用github快速部署 初始化仓库 本地配置 配置github的ssh密钥 部署 为什么用VuePressÿ…...
shell编程--永久环境变量和字符串显位
环境变量 echo $HOME 在终端输出后会显示家目录有个root变量 我们会提出个疑问为什么平时我们在终端输入sl 或者which等等命令会输出一些内容呢,这是因为这些命令都有对应的环境变量。 我们查看一下环境变量 在终端输入: echo $PATH 我们看一下输出…...
【优选算法篇】算法江湖中的碎玉拾光——C++模拟题全解,踏步逐章细细品味
文章目录 C 模拟题详解:基础题解与细致分析前言第一章:基础练习1.1 替换所有的问号(easy)解法(模拟)C 代码实现易错点提示时间复杂度和空间复杂度 1.2 提莫攻击(easy)解法࿰…...
【MySQL 保姆级教学】事务的隔离级别(详细)--下(14)
事务的隔离级别 1. 如何理解事务的隔离性2. 事务隔离级别的分类3. 查看和设置事务隔离级别3.1 全局和会话隔离级别3.2 查看和设置隔离级别 4. 事务隔离级别的演示4.1 读未提交(Read Uncommitted)4.2 读已提交(Read Committed)4.3 …...
部分利用oracle数据字典查询对应信息的语句。
查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; …...
实例教程:BBDB为AHRS算法开发提供完善的支撑环境(上)
1. 概述 本教程将结合程序代码及CSS控制站工程,讲述如何基于PH47代码框架的BBDB固件版本,为开发自己的AHRS姿态解算算法提供完善支撑环境,以及数据分析手段。 BBDB固件已内置了一套姿态解算算法。对于需要进行AHRS算法开发研究的开发者&…...
k8s搭建1.23版本
文章目录 1、前期准备1、关闭防火墙和selinux2、关闭交换分区3、修改主机名和免密登录4、内核参数5、安装docker6、安装k8s源 2、安装1、安装k8s软件包2、初始化k8s3、安装calico网络插件4、检查 1、前期准备 以下操作所有主机都要运行的 1、关闭防火墙和selinux systemctl …...
【MYSQL】分库分表
一、什么是分库分表 分库分表就是指在一个数据库在存储数据过大,或者一个表存储数据过多的情况下,为了提高数据存储的可持续性,查询数据的性能而进行的将单一库或者表分成多个库,表使用。 二、为什么要分库分表 分库分表其实是两…...
CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)
目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…...
Qt Creator远程调试实战:当你的开发机是Win10,测试机是Win7时该怎么办?
Qt Creator跨Windows版本远程调试实战:Win10到Win7的完整解决方案 当开发环境与测试环境存在Windows版本差异时,Qt项目的远程调试往往会遇到各种"玄学"问题。本文将针对Win10开发机与Win7测试机的典型组合,深入解析CDB远程调试的完…...
告别30秒等待!优化C# BLE设备搜索,Win10下3秒快速发现蓝牙锁(附核心代码对比)
告别30秒等待!优化C# BLE设备搜索,Win10下3秒快速发现蓝牙锁(附核心代码对比) 在物联网设备快速普及的今天,低功耗蓝牙(BLE)技术因其低能耗、低成本的特点,成为智能锁、可穿戴设备等…...
如何高效管理学术引用数据:Zotero智能统计插件完整指南
如何高效管理学术引用数据:Zotero智能统计插件完整指南 【免费下载链接】zotero-citationcounts Zotero plugin for auto-fetching citation counts from various sources 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-citationcounts 如果你是一位研…...
OBS多平台直播插件:打破平台限制的5分钟专业解决方案
OBS多平台直播插件:打破平台限制的5分钟专业解决方案 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 想象一下这样的场景:你精心准备的游戏直播即将开始…...
FPGA加速的实时细胞分类系统设计与实现
1. 项目概述:FPGA加速的实时细胞分类与分选系统在生物医学研究和临床诊断中,细胞分类是一项基础而关键的技术。传统流式细胞术依赖荧光标记识别细胞表面抗原,这种方法虽然准确,但存在明显局限:每检测一种新标记就需要对…...
C++ 资源操作注意事项(内存、文件、数据库、网络...)
文章目录1. 资源类型2. 资源可变性3. 资源分配策略4. 资源访问权限5. 资源所有权转移6. 资源获取和释放7. 生命周期管理8. 资源有效性检查9. 资源竞争(多线程安全性)10. 资源泄漏防范11. 异常安全性在C中,确保资源的有效和安全管理至关重要。…...
第67篇:Vibe Coding时代:FastAPI + LangGraph 审批台实战,解决高风险 Agent 操作人工确认体验差的问题
第67篇:Vibe Coding时代:FastAPI + LangGraph 审批台实战,解决高风险 Agent 操作人工确认体验差的问题 一、问题场景:Agent 需要人工确认,但用户不知道该确认什么 前面我们已经做过人工确认: approval = APPROVED / REJECTED但真实平台中,审批不能只是一个字符串。 当…...
MD源码#MDH5影视源码主题模版下载 苹果CMS V10版
内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 MD源码#MDH5影视源码主题模版下载 苹果CMS V10版 一键部署版本,完美运营版本带采集规则模块 system/include.html–公共引用文件 system/header.html–头部文件 system/foo…...
从一次内存拷贝崩溃说起:手把手教你用memcpy_s重构老旧C代码
从内存越界崩溃到安全重构:实战memcpy_s迁移指南 调试器突然停止在memcpy调用处,控制台抛出"Segmentation fault"的那一刻,每个C语言开发者都会心头一紧。这种由内存越界引发的崩溃在遗留代码库中尤为常见,就像我去年接…...
半导体行业如何应对政策不确定性:从游说策略到企业决策
1. 从一篇旧报道看半导体行业的“华盛顿困局”最近整理资料时,翻到一篇2012年EE Times的旧文,标题是《硅谷国度:选举后的政治僵局或将持续——SIA CEO如是说》。文章不长,但里面半导体行业协会(SIA)时任CEO…...
