目录

Nginx 服务用户与防盗链配置

1. 隐藏版本号

1.1 配置方法

1.2 生效与验证

2. 修改当前程序账号

2.1 操作步骤

3. 缓存时间

3.1 配置方法

3.2 说明

4. 日志分割

4.1 实现方式(脚本自动分割)

5. 连接超时时间

5.1 核心超时指令(配置在http或server块)

5.2 说明

6. 更改进程数

6.1 配置方法

6.2 优化建议

7. 网页压缩

7.1 配置方法(在http块中添加)

7.2 验证

8. 配置防盗链

8.1 配置方法(在server块或location块中添加)

8.2 指令说明

8.3 生效与验证


Nginx 服务用户与防盗链配置

1. 隐藏版本号

Nginx 默认会在响应头(如Server: nginx/1.24.0)中显示具体版本号,这可能泄露服务器信息,增加安全风险。隐藏版本号可减少攻击者利用特定版本漏洞的可能性。

1.1 配置方法

在 Nginx 主配置文件(nginx.conf)的http块中添加server_tokens指令:

http {

    ...

    server_tokens off;  # 关闭版本号显示

    ...

}

1.2 生效与验证

  • 重载配置:systemctl reload nginx 或 nginx -s reload
  • 验证:通过curl -I 服务器IP查看响应头,Server: nginx表示版本号已隐藏(无具体版本信
  • 息)。

2. 修改当前程序账号

Nginx 默认以nginx用户和用户组运行,若该账号权限配置不当,可能导致安全隐患。修改运行账号可遵循 “最小权限原则”,限制程序对系统资源的访问范围。

2.1 操作步骤

1.创建专用用户组和用户

groupadd -r nginx_user  # -r表示系统组

useradd -r -g nginx_user  /sbin/nologin nginx_user  # -r系统用户

2.修改 Nginx 配置:在主配置文件的全局块中指定新用户和组:

user nginx_user nginx_user;  # 用户名  用户组

worker_processes auto;

重启生效systemctl restart nginx

3. 缓存时间

对静态资源(如图片、CSS、JS 文件)设置缓存时间,可减少重复请求,降低服务器压力,同时加快客户端二次访问速度(浏览器直接从本地缓存加载资源)。

3.1 配置方法

server块或location块中通过expires指令设置缓存时间,常见场景如下:

server {

    ...

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {  # 匹配静态文件后缀

        root /usr/share/nginx/html;

        expires 1d;  # 缓存1天(单位支持s秒、m分、h时、d天、w周、M月、y年)

    }

    ...

}

3.2 说明

  • ~*表示不区分大小写匹配文件后缀。
  • max-age值需与expires时间一致(30 天 = 30×24×3600=2592000 秒)。
  • 动态资源(如 PHP 页面)不建议设置长缓存,可根据需求设为expires -1(不缓存)。

4. 日志分割

Nginx 默认将所有访问日志写入一个文件(如access.log),长期运行会导致文件过大,难以查看和备份。日志分割可按时间(如每日)拆分日志,便于管理和归档。

4.1 实现方式(脚本自动分割)

  1. 创建分割脚本(如/usr/local/nginx/sbin/logrotate.sh):

#!/bin/bash

# Filename: fenge.sh
day=$(date -d "-1 day" "+%Y%m%d")                                                               #显示前一天的时间
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path                                                             #创建日志文件目录
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-$day    #移动并重命名日志文件
kill -USR1 $(cat $pid_path)                                                                               #重建新日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;                                                     #删除30天之前的日志文件
#find $logs_path -mtime +30 | xargs rm -rf 

  1. 添加执行权限chmod +x /usr/local/nginx/sbin/logrotate.sh
  2. 设置定时任务(通过crontab每日凌晨执行):

crontab -e

# 添加以下内容(每天1点执行)

0 1 * * * /usr/local/nginx/sbin/logrotate.sh

5. 连接超时时间

Nginx 通过超时时间控制客户端连接的生命周期,合理设置可避免无效连接占用服务器资源,尤其适用于高并发场景。

5.1 核心超时指令(配置在httpserver块)

http {

    ...

   keepalive_timeout 65 180;      三次握手的超时时间
    client_header_timeout 80;       等待客户端发送请求头的超时时间会送408 错误
    client_body_timeout 80;          设置客户端发送请求体的超时时间

    ...

}

#keepalive_timeout
指定KeepAlive的超时时间(timeout)。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。
第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。

##client_header_timeout
客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。

###client_body_timeout
指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。

5.2 说明

  • 超时时间需根据业务场景调整(如静态资源服务可设较短,文件上传服务可适当延长)。
  • keepalive_timeout过短会增加连接建立开销,过长可能浪费资源,建议 50-70 秒。

6. 更改进程数

Nginx 的工作进程(worker_processes)负责处理客户端请求,进程数设置是否合理直接影响并发处理能力。默认值为 1,需根据服务器 CPU 核心数调整。

6.1 配置方法

在主配置文件的全局块中修改:

# 自动匹配CPU核心数(推荐,无需手动计算)

worker_processes auto;

# 或手动指定(如4核CPU设为4)

# worker_processes 4;

6.2 优化建议

  • 进程数通常设为与 CPU 核心数相同(避免进程切换开销)。
  • 若服务器为多核 CPU,可结合worker_cpu_affinity绑定进程到特定核心(减少资源竞争):

worker_processes 4;  # 4核CPU

worker_cpu_affinity 0001 0010 0100 1000;  # 分别绑定到1-4核(二进制表示)

7. 网页压缩

启用 Gzip 压缩可减小传输数据量(尤其是文本类资源,压缩率可达 50% 以上),加快页面加载速度,节省带宽。

7.1 配置方法(在http块中添加)

http {

    ...

    gzip on;  # 开启Gzip压缩

    gzip_min_length 1k;  # 文件大小超过1KB才压缩(小文件压缩收益低)

    gzip_buffers 4 64k;  # 压缩缓冲区大小

    gzip_http_version 1.1;  # 支持的HTTP版本

    gzip_comp_level 5;  # 压缩等级(1-9,等级越高压缩率越高,CPU消耗越大)

    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;  # 需压缩的文件类型

    gzip_vary on;  # 向客户端发送Vary: Accept-Encoding头,告知支持压缩

    ...

}

7.2 验证

  • 在Linux系统中,打开浏览器,右击点查看元素
    选择 网络 ---> 选择 HTML、WS、其他 
    访问 http://192.168.10.23 ,双击200响应消息查看响应头中包含 Content-Encoding: gzip

8. 配置防盗链

防盗链用于阻止其他网站直接引用本服务器的资源(如图片、视频),避免带宽被非法占用。其原理是通过验证请求的Referer(来源页面)判断是否为合法请求。

8.1 配置方法(在server块或location块中添加)

server {

    ...

    location ~* \.(jpg|jpeg|png|gif|mp4)$ {  # 对图片、视频等资源防盗链

        root /usr/share/nginx/html;

        # 允许自身域名和指定白名单域名访问(空Referer表示直接访问,如浏览器输入图片URL)

        valid_referers none blocked server_names *.example.com;

        # 非法请求返回403或指定替代图片

        if ($invalid_referer) {

            return 403;  # 或rewrite ^/ /forbidden.png last;(返回自定义图片)

        }

    }

    ...

}

8.2 指令说明

  • valid_referers:定义合法的来源,none允许空 Referer,blocked允许被防火墙修改过的 Referer,server_names允许自身域名,*.example.com允许指定域名及子域名。
  • $invalid_referer:内置变量,当请求来源不在valid_referers中时为true

8.3 生效与验证

  • 重载配置后,通过其他网站引用资源会返回 403,本服务器或白名单域名可正常访问。

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

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

相关文章

域格4G模块通信协议之HTTP(三):下载大文件的两种方式

域格ASR系列模块支持HTTP下载大文件,本文将提供两种方式。一、直接通过URC上报数据基础操作核心指令说明配置说明响应说明应用示例注意点二、HTTP Range分段下载核心指令说明注意点一、直接通过URC上报数据 若文件体积适中,且需要 MCU 即时处理数据&…

Android 图片 OOM 防护机制设计:大图加载、内存复用与多级缓存

1. 为什么图片加载总让 Android 开发抓狂? 图片是 Android 应用中不可或缺的元素,从用户头像到高清壁纸,从商品详情页到动态表情包,图片无处不在。然而,图片加载是内存管理的雷区,稍不留神就可能触发臭名昭著的 OutOfMemoryError(OOM)。为啥图片这么“吃内存”?原因很…

9月9日

TCP 服务器端#include <myhead.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.108.179" //服务器IP地址 int main(int argc, const char *argv[]) {//创建一个用于连接的套接字文件描述符int sfd socket(AF_INET, SOCK_STRE…

Docker生产部署

目录 一、准备工作&#xff1a;理解 Docker 与 Spring Boot 的关系 1. Docker 是什么&#xff1f; 2. Spring Boot 为什么适合 Docker&#xff1f; 二、编写Dockerfile 三、配置管理 挂载外部配置文件 四、用 docker-compose 编排多服务 一、准备工作&#xff1a;理解 Do…

ARM 基础(3)

ARM汇编与C语言函数的相互调用及参数传递汇编调用C函数参数传递规则 前4个参数通过寄存器 R0-R3 传递&#xff0c;超出部分从右向左压栈。32位返回值存于 R0&#xff0c;64位整数用 R0 和 R1&#xff0c;浮点数通过 S0/D0 返回。示例&#xff1a;ARM汇编调用C函数.global _star…

OpenCV计算机视觉笔记合集

参考课程&#xff1a; 【黑马程序员 OpenCV入门教程】 [https://www.bilibili.com/video/BV1Fo4y1d7JL] ZZHow(ZZHow1024) 学习路线 基本的图像处理方法&#xff1a;几何变换&#xff0c;形态学变换&#xff0c;图像平滑&#xff0c;直方图操作&#xff0c;模板匹配&#…

Mybatis-12 第三方缓存-EhCache

配置文档 Ehcache配置文件ehcache.xml Java Ehcache缓存的timeToIdleSeconds和timeToLiveSeconds区别 基本介绍 1.EhCache是一个纯Java的缓存框架&#xff0c;具有快速、精干等特点 2.MyBatis有自己默认的二级缓存&#xff08;前面我们已经使用过了&#xff09;&#xff0c;…

元器件--电容器

文章目录一、技术理论  1、电容定义  2、定义式  3、单位换算  4、电容作用  5、电容特性二、组成结构  1、极板&#xff08;电极&#xff09;​​  ​​2、介质&#xff08;绝缘层&#xff09;​​  3、引线&#xff08;电极引出端&#xff09;​​  4、封装…

【Leetcode hot 100】146.LRU缓存

问题链接 146.LRU缓存 问题描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关…

MySQL超大数据量查询与删除优化

引言 在处理TB级数据时&#xff0c;传统SQL操作可能导致性能崩溃。本文揭示MySQL超大数据量场景下的核心优化策略&#xff0c;通过生产环境案例展示如何将亿级数据删除耗时从8小时压缩至8分钟&#xff0c;并附完整监控方案与容灾措施。 深度剖析海量数据操作痛点 1. 传统删除操…

【内存管理】常用的页表映射函数

1、pgd_addr_end 根据当前虚拟地址 addr 和目标结束地址 end&#xff0c;计算当前 PGD 项 能够覆盖的最大虚拟地址范围的结束地址 next。 如果 addr 和 end 跨越多个 PGD 项&#xff08;即 end 超出当前 PGD 项的地址范围&#xff09;&#xff0c;则返回当前 PGD 项的地址边界。…

XR数字融合工作站赋能新能源汽车专业建设的创新路径

XR数字融合工作站作为集PC、VR、MR技术于一体的软硬件集成平台&#xff0c;凭借其多维交互、虚实融合、智能管理等特性&#xff0c;为新能源汽车专业的教学改革与创新提供了全新解决方案。一、教学场景革新&#xff1a;构建沉浸式、互动化学习环境XR数字融合工作站通过多形态拼…

C语言通用链表终章:优雅的收尾 - 清空与销毁

各类资料学习下载合集 ​https://pan.quark.cn/s/8c91ccb5a474​ 经过前面的学习,我们已经从零构建了一个功能强大的通用链表,它能自如地进行节点的插入和删除。我们的“数据火车”已经可以驰骋在内存的世界里。然而,旅途终有终点,当火车完成任务后,如何安全、彻底地让…

MATLAB R2025a安装配置及使用教程(超详细保姆级教程)

文章目录前言什么是MATLAB&#xff1f;了解这款数据分析利器matlab安装前准备工作MATLAB R2025a下载完整MATLAB R2025a安装步骤MATLAB进阶应用技巧前言 全网最新最全的MATLAB R2025a安装教程来了&#xff01;2025年版本完整图文指南&#xff0c;包含软件下载、详细安装、密钥激…

在Mybatis plus中如何使用自定义Sql

在演示UpdateWrapper的案例中&#xff0c;我们在代码中编写了更新的SQL语句&#xff1a;Test void testUpadateWrapper(){List<Long> ids List.of(1L,2L,4L);//生成SQLUpadateWrapper<User> wrapper new UpdateWrapper<User> ().setSql("balance balan…

Deepoc科技之暖:智能助盲设备如何为视障家人点亮生活

作为一名视障人士的家属&#xff0c;我们或许都经历过这样的时刻&#xff1a;看着亲人在书架前摸索&#xff0c;却无法独自获取文字信息&#xff1b;担心他们外出时遇到障碍物或交通危险&#xff1b;心疼他们因找不到日常物品而不得不一次次求助。这些细微的日常困境&#xff0…

大模型食材识别技术革新:AI重构精准营养管理

随着健康意识的提升&#xff0c;饮食管理需求激增&#xff0c;但传统手动记录易出错、效率低。大模型食材识别技术的突破&#xff0c;让AI通过多模态输入精准识别食材种类与重量&#xff0c;结合营养数据库&#xff0c;系统可快速生成营养报告&#xff0c;实现从“经验驱动”到…

使用 Altair RapidMiner 将机器学习引入您的 Mendix 应用程序

Altair RapidMiner 使机器学习更加容易&#xff1a;无论您喜欢使用 Python 编码&#xff0c;还是在 Workflow Studio 中进行可视化工作&#xff0c;Altair AI Cloud 都能为团队提供快速构建和部署 ML 模型的工具。 将机器学习与 Mendix 集成很简单&#xff1a;通过 Mendix 的低…

EasyExcel:快速读写Excel的工具类

EasyExcel&#xff1a;快速读写Excel的工具类 项目介绍 ​EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的情况下&#xff0c;快速完成Excel的读、写等功能。 pom地址 ‍ <!--exel--> <depe…

WSL Ubuntu Docker 代理自动配置教程

WSL Ubuntu Docker 代理自动配置教程 WSL Ubuntu Docker 代理自动配置教程 背景说明 在 WSL2 环境下使用 Docker 时&#xff0c;由于网络环境限制&#xff0c;经常需要通过 Windows 主机上的代理来访问 Docker Hub。但每次 Windows 重启后&#xff0c;WSL 获取到的主机 IP 地址…