当前位置: 首页 > article >正文

深度解析 Nginx 配置:从性能优化到 HTTPS 安全实践

引言

Nginx 作为高性能的 Web 服务器和反向代理,其配置灵活性和强大功能备受开发者青睐。本文基于一份生产环境的 Nginx 配置文件,详细拆解其核心配置逻辑,涵盖性能优化、HTTPS 安全配置、反向代理及静态资源处理等关键环节,帮助读者理解如何构建高效可靠的 Nginx 服务。

一、全局配置:进程管理与日志系统

1. 进程管理

user  nginx;
worker_processes  auto;
pid        /var/run/nginx.pid;
  • user nginx:指定 Nginx 工作进程运行的用户,通常使用非 root 用户以增强安全性。

  • worker_processes auto:自动根据服务器 CPU 核心数设置工作进程数,充分利用多核性能。生产环境建议设为 CPU 核心数或其 2 倍。

2. 日志系统

error_log  /var/log/nginx/error.log notice;
access_log  /var/log/nginx/access.log buffer=16k flush=1m main;
error_log  /var/log/nginx/error.log error;
  • 错误日志

    • error_log /var/log/nginx/error.log notice;:全局错误日志级别为 notice,记录普通警告信息。

    • error_log /var/log/nginx/error.log error;:在 http 块中覆盖为 error 级别,仅记录严重错误,减少日志冗余。

  • 访问日志

    • buffer=16k flush=1m:启用 16KB 缓冲区,每 1 分钟强制写入磁盘,减少 I/O 操作,提升高并发下的性能。

    • log_format main:自定义日志格式,包含客户端 IP、请求时间、状态码、用户代理等关键信息,便于后续分析。

二、Events 模块:连接处理优化

events {worker_connections  1024;
}
  • worker_connections 1024:每个工作进程的最大连接数。计算公式:worker_processes * worker_connections 为 Nginx 最大并发连接数。生产环境可根据内存调整(如 4096),但需注意系统文件句柄限制(可通过 ulimit -n 查看)。

三、HTTP 核心配置:性能与压缩

1. 基础性能优化

http {sendfile        on;tcp_nopush     on;keepalive_timeout  65;
}
  • sendfile on:启用零拷贝传输,减少 CPU 消耗,提升静态文件传输效率。

  • tcp_nopush on:配合 sendfile,将多个小数据包合并为一个大数据包发送,减少网络延迟。

  • keepalive_timeout 65:长连接超时时间,避免无效连接占用资源。

2. Gzip 压缩配置

gzip on;
gzip_comp_level 6;
gzip_min_length 256;
gzip_types text/plain text/css application/javascript application/json;
gzip_disable "msie6|trident";
  • gzip on:启用压缩,通常可将文本类资源压缩至原大小的 1/4。

  • comp_level 6:压缩级别(1-9),6 为平衡压缩率与 CPU 消耗的推荐值。

  • min_length 256:仅压缩大于 256 字节的资源,避免小文件压缩后体积反而增大。

  • gzip_types:指定压缩的 MIME 类型,优先压缩 HTML、CSS、JS、JSON 等文本内容。

  • gzip_disable:禁用对旧浏览器(如 IE6)的压缩,避免兼容性问题。

四、HTTPS 配置:安全通信与性能平衡

1. 强制 HTTPS 重定向

server {listen 80;server_name 域名或IP地址;return 301 https://$host$request_uri;
}
  • 通过 80 端口的 server 块,将所有 HTTP 请求永久重定向(301)至 HTTPS,确保通信安全。

2. HTTPS 核心配置

server {listen 443 ssl http2;server_name 域名或IP地址;ssl_certificate     ssl证书配置的pem;ssl_certificate_key ssl证书配置的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_protocols:仅启用 TLSv1.2 和 TLSv1.3,禁用不安全的旧协议(如 SSLv3、TLSv1.0)。

    • ssl_ciphers:使用现代加密算法,优先选择 ECDHE 算法,提供前向保密(FS)。

    • ssl_prefer_server_ciphers on:服务端优先选择加密算法,增强安全性。

  • 性能优化

    • ssl_session_cache shared:SSL:10m:共享 SSL 会话缓存,减少重复握手开销。

    • ssl_session_timeout 10m:会话缓存超时时间,合理设置可提升连接复用率。

3. 安全响应头

add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;";
  • X-Content-Type-Options nosniff:防止浏览器误判资源 MIME 类型,避免 XSS 攻击。

  • X-Frame-Options DENY:禁止页面被嵌入到 iframe 中,防范点击劫持。

  • Strict-Transport-Security:强制浏览器使用 HTTPS 连接,有效期 1 年(max-age=31536000),包含子域名。

五、反向代理与动态服务

1. 反向代理至 FastAPI 服务

location / {proxy_pass http://fastapi:8000;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_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
}
  • 请求头透传

    • X-Real-IP 和 X-Forwarded-For:传递客户端真实 IP,便于后端服务记录和验证。

    • Upgrade 和 Connection:支持 WebSocket 协议升级,确保动态服务兼容性。

  • 超时设置

    • proxy_connect_timeout 30s:连接上游服务器的超时时间。

    • proxy_read_timeout 86400s:读取上游响应的超时时间(长连接场景可设为大值)。

六、静态资源处理

location /static/ {expires 3h;add_header Cache-Control "max-age=10800, public";alias /path/to/static/files/;  # 需替换为实际路径try_files $uri =404;
}
  • 缓存控制

    • expires 3h 和 Cache-Control: max-age=10800:强制浏览器缓存静态资源 3 小时,减少重复请求。

  • 路径映射

    • alias:将 /static/ 前缀替换为实际文件路径(如 /var/www/static/),避免 root 导致的路径重复问题。

  • 错误处理try_files $uri =404 确保不存在的文件直接返回 404,提升响应速度。

七、配置验证与最佳实践

1. 语法检查

nginx -t  # 验证配置文件语法正确性

2. 性能调优建议

  • 连接数优化:根据服务器内存调整 worker_connections(公式:worker_processes * worker_connections <= 系统最大文件句柄数)。

  • SSL 证书管理:使用 Let’s Encrypt 自动续签证书,避免证书过期导致服务中断。

  • 日志分析:结合 ELK Stack 或 Prometheus 分析访问日志,监控异常请求和慢响应。

八、示例nginx.conf文件

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}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"';access_log  /var/log/nginx/access.log buffer=16k flush=1m main;error_log  /var/log/nginx/error.log error;sendfile        on;tcp_nopush     on;keepalive_timeout  65;# 压缩文件配置gzip on;gzip_comp_level 6;gzip_min_length 256;gzip_buffers 16 8k;gzip_http_version 1.1;gzip_vary on;# 压缩文件类型gzip_typestext/plaintext/csstext/javascriptapplication/javascriptapplication/jsonapplication/xmlapplication/xml+rssapplication/xhtml+xml;# 禁用对旧浏览器的压缩gzip_disable "msie6|trident";include /etc/nginx/conf.d/*.conf;# 关键配置server {listen 80;server_name 域名或IP地址;return 301 https://$host$request_uri;}server {listen 443 ssl http2;server_name 域名或IP地址;# SSL 证书配置ssl_certificate    ssl证书配置的pem;ssl_certificate_key    ssl证书配置的key;# SSL 安全配置(优化后)ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_session_tickets off;error_page 497 https://$host$request_uri;# 安全头add_header X-Content-Type-Options nosniff;add_header X-Frame-Options DENY;add_header X-XSS-Protection "1; mode=block";add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;";# 反向代理location / {# 使用服务名或网络别名代替本地地址,不支持httpsproxy_pass http://fastapi:8000;# 基础请求头设置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;# WebSocket 支持proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# 超时设置 (根据实际需求调整)proxy_connect_timeout 30s;proxy_read_timeout 86400s;proxy_send_timeout 30s;# 可选: 缓冲区设置proxy_buffering on;proxy_buffer_size 4k;proxy_buffers 4 32k;}# 静态资源location /static/ {expires 3hadd_header Cache-Control "max-age=10800, public";alias 文件路径try_files $uri =404;}}
}

九、总结

本文拆解的 Nginx 配置涵盖了性能优化、HTTPS 安全、反向代理及静态资源管理的核心逻辑。关键亮点包括:

  • 通过 sendfile、Gzip 压缩和长连接配置提升性能;

  • 严格的 HTTPS 配置与安全响应头增强数据传输安全;

  • 灵活的反向代理与 WebSocket 支持适配现代应用架构。

实际部署时,需根据业务场景调整参数(如超时时间、缓存策略),并定期进行安全审计和性能压测,确保 Nginx 服务稳定高效运行。

相关文章:

深度解析 Nginx 配置:从性能优化到 HTTPS 安全实践

引言 Nginx 作为高性能的 Web 服务器和反向代理&#xff0c;其配置灵活性和强大功能备受开发者青睐。本文基于一份生产环境的 Nginx 配置文件&#xff0c;详细拆解其核心配置逻辑&#xff0c;涵盖性能优化、HTTPS 安全配置、反向代理及静态资源处理等关键环节&#xff0c;帮助…...

触发器与存储过程详解

触发器与存储过程详解 1. 触发器(Trigger)基础概念 1.1 定义与特性 go专栏:https://duoke360.com/tutorial/path/golang 触发器是数据库中的一种特殊存储程序,它在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。触发器具有以下核心特性: 事件驱动:与表事件绑…...

游戏盾与高防CDN的协同防御策略分析

游戏盾与高防CDN的协同防御策略可以从技术互补性、分层防护机制、动态流量调度等角度展开分析&#xff0c;以下为核心要点&#xff1a; ​​1. 分层防御架构&#xff1a;流量分层过滤​​ ​​高防CDN边缘层​​&#xff1a;利用全球分布的边缘节点作为“第一道防线”&#xf…...

Scratch节日 | 六一儿童节射击游戏

六一儿童节快乐&#xff01;这款超有趣的 六一儿童节射击游戏&#xff0c;让你变身小猫弓箭手&#xff0c;守护节日的快乐时光&#xff01; &#x1f3ae; 游戏玩法 上下方向键&#xff1a;控制小猫的位置&#xff0c;自由移动&#xff0c;瞄准目标&#xff01; 空格键&#…...

GPU层次结构(Nvidia和Apple M芯片,从硬件到pytorch)

这里写目录标题 0、驱动pytorch环境安装验证1.window环境2.Mac Apple M芯片环境 1、Nvidia显卡驱动、CUDA、cuDNN关系汇总1**1. Nvidia显卡驱动&#xff08;Graphics Driver&#xff09;****2. CUDA&#xff08;Compute Unified Device Architecture&#xff09;****3. cuDNN&a…...

一次借助ChatGPT抵御恶意攻击的经历,为个人服务器添加自动防御系统Fail2ban

title: 一次借助ChatGPT抵御恶意攻击的经历&#xff0c;为个人服务器添加自动防御系统Fail2ban tags: 个人成长 categories:杂谈 我有一台个人服务器&#xff0c;托管着自己的WordPress网站&#xff0c;也放了RustDesk这种私有化的远程桌面工具&#xff0c;最近我发现RustDesk…...

(九)深度学习---自然语言处理基础

分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高斯混合聚类LDA主题模型 一.文本数据的表示方法 二.神经网络文本情感分析案例 三…...

【Java Web】速通Tomcat

参考笔记:JavaWeb 速通Tomcat_tomcat部署java项目-CSDN博客 目录 一、Tomcat服务 1. 下载和安装 2. 启动Tomcat服务 3. 启动Tomcat服务的注意事项 4. 关闭Tomcat服务 二、Tomcat的目录结构 1. bin 🌟 2. conf 🌟 3. lib 4. logs 5. temp 6. webapps 7. work 三、Web项目…...

Docker快速部署数据同步工具DataX-Web

笔者最近有需求需要进行数据同步&#xff0c;目前确认DataX-Web适合快速搭建使用&#xff0c;满足基本需求。以此记录搭建Datax-Web过程和解决的坑。 一、启动MySQL容器 &#xff08;1&#xff09;首先&#xff0c;我们运行一个支撑DataX-Web运行的MySQL容器。 docker run --…...

从零开始的云计算生活——第十四天,困难重重,安全管理。

一故事背景 在前面的基本无操作内容后&#xff0c;来到了大头内容&#xff0c;安全管理&#xff01;其中的防火墙相关的内容更是重中之重&#xff0c;要好好掌握&#xff0c;熟练运用。 二SELinux安全上下文 1SELinux 简介 a. SELinux&#xff08;Security-Enhanced Linux&…...

迁移学习模型构建指南(Python实现)

迁移学习模型构建指南(Python实现) 一、迁移学习概述 迁移学习是一种机器学习方法,通过将预训练模型的知识迁移到新任务中,显著提升模型性能和训练效率。其核心思想是:模型在大型数据集上学习到的通用特征(如边缘、纹理、形状)可被复用至相关任务。 迁移学习类型: 特…...

【设计模式-4.6】行为型——状态模式

说明&#xff1a;本文介绍行为型设计模式之一的状态模式 定义 状态模式&#xff08;State Pattern&#xff09;也叫作状态机模式&#xff08;State Machine Pattern&#xff09;&#xff0c;允许对象在内部状态发生改变时改变它的行为&#xff0c;对象看起来好像修改了它的类…...

【LeetCode 热题100】动态规划实战:打家劫舍、完全平方数与零钱兑换(LeetCode 198 / 279 / 322)(Go语言版)

&#x1f4b0; 动态规划实战&#xff1a;打家劫舍、完全平方数与零钱兑换&#xff08;LeetCode 198 / 279 / 322&#xff09; 本篇博客一次性带你掌握三道 LeetCode 中经典的动态规划&#xff08;DP&#xff09;题目&#xff1a; &#x1f3e0; 198. 打家劫舍&#xff08;Hou…...

换ip是换网络的意思吗?怎么换ip地址

在数字化时代&#xff0c;IP地址作为我们在网络世界的"身份证"&#xff0c;其重要性不言而喻。许多人常将"换IP"与"换网络"混为一谈&#xff0c;实际上两者虽有联系却存在本质区别。本文将澄清这一概念误区&#xff0c;并详细介绍多种更换IP地址…...

【软件】在 macOS 上安装 MySQL

在 macOS 上安装 MySQL 有多种方法&#xff0c;以下是两种常见的安装方式&#xff1a;通过 Homebrew 安装和通过安装包安装。以下是详细的步骤&#xff1a; 一、通过 Homebrew 安装 MySQL Homebrew 是 macOS 的包管理器&#xff0c;使用它安装 MySQL 非常方便。 1.安装 Home…...

手机归属地查询接口如何用Java调用?

一、什么是手机归属地查询接口&#xff1f; 是一种便捷、高效的工具&#xff0c;操作简单&#xff0c;请求速度快。它不仅能够提高用户填写地址的效率&#xff0c;还能帮助企业更好地了解客户需求&#xff0c;制定个性化的营销策略&#xff0c;降低风险。随着移动互联网的发展…...

随笔20250530 C# 整合 IC卡读写技术解析与实现

以下是一个完整、最简化的 FeliCa 读取整合示例&#xff08;无需 SDK&#xff0c;基于 PCSC NuGet 包&#xff09;&#xff0c;你可以直接运行这个控制台程序&#xff0c;验证能否识别 RC-S300 并读取卡片 UID&#xff1a; &#x1f9ea; 示例说明 &#x1f4e6; 使用 NuGet 包…...

循环神经网络(RNN):为什么它能处理时序数据?它真的能减轻过拟合吗?

循环神经网络&#xff08;RNN&#xff09;&#xff1a;为什么它能处理时序数据&#xff1f;它真的能减轻过拟合吗&#xff1f; 在深度学习领域&#xff0c;循环神经网络&#xff08;RNN, Recurrent Neural Network&#xff09;是一种非常重要的神经网络结构&#xff0c;尤其适…...

JVM与JMM深度解析:从Java 8到Java 21的演进

文章目录 第一部分&#xff1a;JVM基础概念与架构JVM是什么&#xff1f;JVM整体架构运行时数据区类加载机制执行引擎 第二部分&#xff1a;Java内存模型&#xff08;JMM&#xff09;什么是Java内存模型JMM的核心问题主内存与工作内存内存间交互操作重排序与happens-before原则v…...

基于爬取的典籍数据重新设计前端界面

1.BooksView(书籍列表页) 2.ClassicsView&#xff08;目录页&#xff09; 3.管理员端...

基于C++的IOT网关和平台5:github项目ctGateway开发指南

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。 源码指引:github源码指引_初级代码游戏的博客-CSDN博客 系…...

揭秘 NextJS Script 组件

揭秘 NextJS Script 组件 Next.js 的 Script 组件是对原生 <script> 标签的增强封装&#xff0c;主要区别和优势如下&#xff1a; 自动优化加载策略&#xff08;支持按需/延迟加载&#xff09;避免重复加载内置性能优化&#xff08;如预加载、回调钩子&#xff09;简化…...

网络安全防御指南:全方位抵御暴力破解攻击

在数字化时代&#xff0c;网络安全威胁如影随形&#xff0c;暴力破解攻击&#xff08;又称“爆破”&#xff09;作为黑客常用的入侵手段&#xff0c;正时刻觊觎着系统的薄弱环节。想象一下&#xff0c;攻击者如同不知疲倦的“数字小偷”&#xff0c;利用自动化工具疯狂尝试成千…...

【C++/Linux】TinyWebServer前置知识之IP协议详解

目录 IPv4地址 分类 IP数据报分片 IP 协议在传输数据报时&#xff0c;将数据报分为若干分片&#xff08;小数据报&#xff09;后进行传输&#xff0c;并在目的系统中进行重组&#xff0c;这一过程称为分片&#xff08;Fragmentation&#xff09;。 IP模块工作流程​编辑 I…...

mac安装brew时macos无法信任ruby的解决方法

背景 在使用如下脚本安装brew时&#xff0c;遇到安装ruby&#xff0c;macos不信任外部软件&#xff0c;在安全性点击信任仍然无法安装。 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"如何解决 本地安装好符…...

Codeforces Round 1028 (Div. 2)(A-D)

题面链接&#xff1a;Dashboard - Codeforces Round 1028 (Div. 2) - Codeforces A. Gellyfish and Tricolor Pansy 思路 要知道骑士如果没了那么这个人就失去了攻击手段&#xff0c;贪心的来说我们只需要攻击血量少的即可&#xff0c;那么取min比较一下即可 代码 void so…...

记录一个梦,借助大语言模型图片生成

梦见家门口有一条大河&#xff0c;但大河和其它景物都是灰暗没有鲜艳色彩很普通的梦中场景。大河似乎是长江的支流&#xff0c;但也可能有一个响亮的名字似乎是金沙江。 突然看到一条金红色的龙在快速游动&#xff0c;不敢相信自己的眼睛&#xff0c;因为一直不相信有这种生物…...

android binder(二)应用层编程实例

一、binder驱动浅析 从上图看出&#xff0c;binder的通讯主要涉及三个步骤。 在 Binder Server 端定义好服务&#xff0c;然后向 ServiceManager 注册服务在 Binder Client 中向 ServiceManager 获取到服务发起远程调用&#xff0c;调用 Binder Server 中定义好的服务 整个流…...

HTML 等价字符引用:系统化记忆指南

HTML 等价字符引用:系统化记忆指南 在 HTML 中,字符引用(Character Entity References)用于表示保留字符或特殊符号。我将提供一个系统化的方法来记忆这些重要实体,并解释它们的实际应用。 什么是等价字符引用? HTML 字符引用有两种形式: 命名实体:&entity_name…...

【深度学习】17. 深度生成模型:DCGAN与Wasserstein GAN公式深度推导

深度生成模型:DCGAN与Wasserstein GAN公式深度推导 深度卷积生成对抗网络 DCGAN 在原始 GAN 框架中&#xff0c;生成器和判别器通常使用全连接层构建&#xff0c;这限制了模型处理图像的能力。为此&#xff0c;Radford 等人在 2016 年提出了 DCGAN&#xff08;Deep Convoluti…...