Nginx常用安全配置指南

Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱代理服务器。它运行在UNIX、GNU、linux、BSD、Mac OS X、Solaris和Windows各种版本。根据调查统计数据显示,当前全球超过6%的网站使用Nginx Web服务器来管理Web网站应用。

为了保证基于Nginx的Web应用安全, 我结合之前在项目中遇到的相应问题进行总结和提炼,针对Nginx常用安全配置进行梳理。

一、基础安全配置

  1. 隐藏版本信息:编辑 Nginx 源码中的 /http/ngx_http_header_filter_module.c 文件,找到以下两行并修改为自定义内容:

    static char ngx_http_server_string[] = “Server: Ninja Web Server” ;
    static char ngx_http_server_full_string[] = “Server: Ninja Web Server” ;
    

    然后重新编译安装 Nginx。

  2. 限制模块加载:在编译 Nginx 时,禁用不必要的模块,例如:

    ./configure -without-http_autoindex_module -without-http_ssi_module
    make
    make install
    
  3. 限制并发连接:在 nginx.conf 文件中,使用 limit_zonelimit_conn 指令限制每个 IP 的并发连接数:

    limit_zone slimits $binary_remote_addr 5m;
    limit_conn slimits 5;
    
  4. 限制访问域名:在 nginx.conf 文件中,添加以下配置,只允许特定域名的请求:

    if ($host !~ ^(guoyu.city|www.guoyu.city|images.guoyu.city)$ ) {return 444;
    }
    
  5. 目录访问限制

    • 通过 IP 地址限制访问
      location /docs/ {deny    192.168.1.1;allow   192.168.1.0/24;deny    all;
      }
      
    • 通过密码保护目录
      mkdir /usr/local/nginx/conf/.htpasswd/
      htpasswd -c /usr/local/nginx/conf/.htpasswd/passwd user
      
      nginx.conf 中添加:
      location ~ /(personal-images/.|delta/.) {auth_basic  “Restricted”;auth_basic_user_file   /usr/local/nginx/conf/.htpasswd/passwd;
      }
      
  6. 防止目录遍历:在 nginx.conf 文件中,设置 autoindex off 来防止目录遍历攻击:

    location / {autoindex off;
    }
    
  7. 过滤常见XSS攻击: 过滤常见的 XSS 攻击字符, XSS 攻击常常涉及将<script>标签或类似的特殊字符(如 <>)作为查询参数的一部分。你可以通过正则表达式来阻止这些非法字符的访问。

    server {listen 80;server_name your-domain.com;# 屏蔽包含 <script> 或类似的 XSS 攻击字符的查询字符串location / {if ($query_string ~* "<script|%3Cscript|%3E|%3C|alert|eval|javascript|<|>") {return 403;  # 返回 HTTP 403 禁止访问}# 其他配置...}# 其他配置...
    }
    

    除了 <script>,你还可以过滤其他可能用于 XSS 攻击的字符,比如 JavaScript 关键字、URL 编码后的字符(如 %3C 为 <,%3E 为 >),甚至是尝试使用 eval() 或 alert() 等 JavaScript 函数。

    server {listen 80;server_name your-domain.com;# 屏蔽含有危险字符或关键字的请求location / {if ($query_string ~* "<script|%3Cscript|%3E|%3C|alert|eval|javascript|<|>") {return 403;  # 返回 HTTP 403 禁止访问}# 其他配置...}# 其他配置...
    }
    
  8. 设置HTTP头: 虽然 X-XSS-Protection 响应头在现代浏览器中已被弃用,但它仍然可以在一些旧版本浏览器中提供一定的保护。可在location规则下添加相应的配置信息。

    add_header X-XSS-Protection "1; mode=block";
    
  9. 设置 Content-Type Options: 阻止浏览器从执行由服务器推断出的 MIME 类型,而非服务器声明的内容类型。可在location规则下添加相应的配置信息。

    add_header X-Content-Type-Options nosniff;
    
  10. 限制请求大小 :通过限制请求的大小,可以减少大型恶意载荷的风险。可在location规则下添加相应的配置信息。

    # 限制请求大小为10KB
    client_max_body_size 10K;
    
  11. 实施内容安全策略(CSP): CSP 是一个额外的安全层,可以帮助检测和减轻某些类型的攻击,包括 XSS 和数据注入攻击。可在location规则下添加相应的配置信息。

    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://apis.guoyu.city";
    

二、SSL/TLS 配置

  1. 生成 SSL 证书

    cd /usr/local/nginx/conf
    openssl genrsa -des3 -out server.key 1024
    openssl req -new -key server.key -out server.csr
    cp server.key server.key.org
    openssl rsa -in server.key.org -out server.key
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    
  2. 配置 SSL:在 nginx.conf 文件中,添加以下配置:

    server {server_name project.guoyu.city;listen 443;ssl on;ssl_certificate /usr/local/nginx/conf/server.crt;ssl_certificate_key /usr/local/nginx/conf/server.key;access_log /usr/local/nginx/logs/ssl.access.log;error_log /usr/local/nginx/logs/ssl.error.log;
    }
    
  3. 配置 HTTPS 重定向:在 nginx.conf 文件中,添加以下配置,将所有 HTTP 请求重定向到 HTTPS:

    server {listen 80;server_name example.com;return 301 https://$host$request_uri;
    }
    
  4. 配置 SSL 参数:在 nginx.conf 文件中,添加以下配置,提高 SSL 安全性:

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    
  5. 使用 Let’s Encrypt 自动续期证书

    • 安装 Certbot 和 Nginx 插件:
      sudo dnf install certbot python3-certbot-nginx -y
      
    • 使用 Certbot 申请 SSL 证书并自动配置 Nginx:
      sudo certbot --nginx -d your_domain.com -d www.your_domain.com
      
    • 配置定时任务,每天凌晨 2 点自动检查并续期证书:
      sudo crontab -e
      0 2 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
      

三、其他安全配置

  1. 安装 SELinux 策略:安装和编译 SELinux 策略以强化 Nginx Web 服务器:

    yum -y install selinux-policy-targeted selinux-policy-devel
    cd /opt
    wget http://downloads.sourceforge.net/project/selinuxnginx/se-ngix_1_0_10.tar.gz?use_mirror=nchc&rsquo
    tar -zxvf se-ngix_1_0_10.tar.gz
    cd se-ngix_1_0_10/nginx
    make
    /usr/sbin/semodule -i nginx.pp
    
  2. 限制 Nginx 连接传出:使用 Iptables 限制 Nginx 用户的传出连接:

    /sbin/iptables -A OUTPUT -o eth0 -m owner -uid-owner nginx -p tcp -dport 80 -m state -state NEW,ESTABLISHED  -j ACCEPT
    
  3. 配置操作系统保护:正确设置 /nginx 文档根目录的权限,确保 Nginx 以非 root 用户运行:

    find /nginx -user nginx
    find /usr/local/nginx/html -user nginx
    ls -l /usr/local/nginx/html/
    
  4. 限制每个 IP 的连接数:在防火墙级别限制每个 IP 的连接数:

    /sbin/iptables -A INPUT -p tcp -dport 80 -i eth0 -m state -state NEW -m recent -set
    /sbin/iptables -A INPUT -p tcp -dport 80 -i eth0 -m state -state NEW -m recent -update -seconds 60  -hitcount 15 -j DROP
    service iptables save
    

通过以上的安全配置,可以大大提高 Nginx 服务器的安全性,减少网站的安全威胁。

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

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

相关文章

【UniApp 日期选择器实现与样式优化实践】

UniApp 日期选择器实现与样式优化实践 发布时间&#xff1a;2025/6/26 前言 在移动端应用开发中&#xff0c;日期选择器是一个常见且重要的交互组件。本文将分享我们在 UniApp 项目中实现自定义日期选择器的经验&#xff0c;特别是在样式优化过程中遇到的问题及解决方案。通过…

推荐系统的视频特征-视频关键帧特征提取与向量生成

&#x1f4cc; 总体流程概览 视频文件 (.mp4)↓ 关键帧抽取&#xff08;FFmpeg / SceneDetect&#xff09;↓ 帧图像&#xff08;.jpg&#xff09;↓ 图像模型提取特征&#xff08;CLIP / CNN / ViT&#xff09;↓ 多帧聚合成视频向量&#xff08;均值池化等&#xff09;↓ 向…

Apache SeaTunnel Flink引擎执行流程源码分析

目录 1. 任务启动入口 2. 任务执行命令类:FlinkTaskExecuteCommand 3. FlinkExecution的创建与初始化 3.1 核心组件初始化 3.2 关键对象说明 4. 任务执行:FlinkExecution.execute() 5. Source处理流程 5.1 插件初始化 5.2 数据流生成 6. Transform处理流程 6.1 插…

Vue 3 + Element Plus 实现「动态表单组件」详解教程

✅ Vue 3 Element Plus 实现「动态表单组件」详解教程 &#x1f4cc; 适用场景&#xff1a;表单字段根据配置动态生成&#xff0c;支持校验、提交、自定义组件、复杂布局等。 &#x1f9e9; 技术栈&#xff1a;Vue 3 TypeScript Element Plus &#x1f527; 核心特性&#x…

本地部署开源时间跟踪工具 Kimai 并实现外部访问( Windows 版本)

Kimai 是一款开源的时间跟踪工具&#xff0c;它易于使用&#xff0c;并提供了强大的报告功能&#xff0c;在个人和团队记录工作时间、项目时间和活动时间等之后可以帮助用户了解他们是如何花费时间的&#xff0c;从而提高生产力和效率。本文将详细介绍如何在 Windows 系统本地部…

系统分析师案例知识点

目录 1 必做题1.1 状态机图1.2 活动图1.3 统一软件开发过程RUP 2 需求分析2.1 数据流图DFD2.2 ER图2.3 状态转换图STD2.4 数据字典2.5 流程图2.6 需求评审2.7 设计类2.8 FAST分析2.9 常见的关系类 3 嵌入式3.1 容器技术3.2 虚拟机技术3.3 虚拟机和容器的不同点 4 数据库4.1 NoS…

多相机人脸扫描设备如何助力高效打造数字教育孪生体?

在教育数字化转型浪潮中&#xff0c;数字孪生体作为现实教育场景的虚拟映射&#xff0c;正成为智慧教育发展的关键技术支点。传统教育模式面临师资资源分布不均、个性化教学难以覆盖、跨时空教学场景受限等痛点&#xff0c;而数字孪生体通过构建高仿真虚拟教育主体&#xff08;…

用 EXCEL/WPS 实现聚类分析:赋能智能客服场景的最佳实践

聚类分析作为无监督学习的核心技术&#xff0c;能在客服数据中发现隐藏的用户群体或问题模式。尽管 Excel/WPS 并非专业统计软件&#xff0c;但巧妙利用其内置功能&#xff0c;也能实现基础的聚类分析&#xff0c;为中小型客服团队提供快速洞察。以下介绍具体方法及智能客服场景…

基于定制开发开源AI智能名片S2B2C商城小程序源码的H5游戏开发模式创新研究

摘要 本文以定制开发开源AI智能名片S2B2C商城小程序源码为技术底座&#xff0c;探讨其在H5游戏开发中的创新应用。通过分析原生开发与第三方工具两种传统开发模式的局限性&#xff0c;提出将AI智能名片的多模态内容生成能力、S2B2C商城的生态协同机制与H5游戏开发深度融合的解…

vue3+ELInput无法输入的问题

vue3ElInput无法输入的问题 开篇 写业务的时候发现&#xff0c;因为想偷懒嘛&#xff0c;直接就在想在外部去定义一个变量&#xff0c;然后写个弹窗里&#xff08;tsx&#xff09;的el-input&#xff0c;而不是又去写个vue页面&#xff0c;但发现就输入不了了&#xff0c;而且…

SQL Server:如何检测和修复 FILESTREAM 数据库损坏?

SQL Server 中的 FILESTREAM 功能可以将二进制大型对象 &#xff08;BLOB&#xff09; 存储到文件系统上&#xff0c;而不是将它们存储在数据库中。但是&#xff0c;默认情况下不启用此功能。用户需要使用 SQL Server Management Studio &#xff08;SSMS&#xff09; 和 SQL S…

FORCE 开发者论坛 | 火山引擎发布多款 Agent 开发工具

资料来源&#xff1a;火山引擎-开发者社区 6 月 12 日&#xff0c;2025 火山引擎 FORCE 原动力大会开发者论坛成功举办。大会聚焦 Agent 开发新范式&#xff0c;升级发布了 PromptPilot、MCP Servers、TRAE、扣子开发平台等产品&#xff0c;以及多款开源项目&#xff0c;构建起…

【Qt-windows】如何使用perfmon 具体分析windows serverR2的Qt程序CPU问题

可以使用 Windows 自带的 PerfMon&#xff08;Performance Monitor&#xff09; 工具对运行在 Windows Server R2 上的 Qt 程序进行详细的性能分析&#xff0c;尤其是 CPU 使用情况。以下是具体的操作步骤和建议&#xff1a; 一、打开 PerfMon 工具 按下 Win R 打开运行窗口。…

【软考高级系统架构论文】论NoSQL数据库技术及其应用

论文真题 随着互联网web2.0网站的兴起,传统关系数据库在应对web2.0 网站,特别是超大规模和高并发的web2.0纯动态 SNS 网站上已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。 NoSQL(Not only SQL )的产生就是为了解…

bash的配置文件,source

一.按生效范围分类 二.按shell登录的方式分类 这里的执行顺序存疑,因为会互相调用,不需要记忆 source执行脚本 source不创建子进程,bash创建子进程 普通脚本:用bash 配置文件脚本:用source 三.按功能分类

30道C语言高频题整理(附答案背诵版)

1.请描述一下C语言的基本数据类型有哪些&#xff1f; C语言提供了一系列的基本数据类型&#xff0c;它们是构建更复杂数据结构的基础。这些基本数据类型主要包括&#xff1a; 整型&#xff08;Integer Types&#xff09;&#xff1a;用于存储整数值。根据存储大小和符号性&…

使用Tailwind CSS和i18n的react实践

首先在 src 下设置 i18n.js 文件 // src/i18n.js import i18n from i18next; import { initReactI18next } from react-i18next;import en from ./locales/en/public; import zh from ./locales/zh/public;i18n.use(initReactI18next) .init({resources: {en: { translation:…

生信自学路线|R语言的数据变量类型与对应运算

R 是一种动态类型语言&#xff0c;使用灵活&#xff0c;变量无需预先声明类型。掌握 R 的数据类型和变量机制&#xff0c;是后续进行数据处理和建模分析的基础。本章节主要介绍 R 语言中的常量、变量、基本数据类型及常用数据结构&#xff0c;并结合示例进行说明。 文章目录 一…

UI前端大数据处理优化策略:提升数据处理速度与准确性

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化浪潮下&#xff0c;前端面临的数据规模正呈指数级增长 ——IDC 预测&#xff0c;2025…

技术调研:时序数据库(二)

除了 InfluxDB、TDengine 和 TimescaleDB&#xff0c;还有其他多个主流的开源时序数据库&#xff0c;各自针对不同场景优化。以下是补充的时序数据库选型清单&#xff0c;涵盖其核心特性、适用场景及局限性&#xff1a; 1. 监控与运维场景 (1) Prometheus 核心优势&#xff1…