Nginx 服务器常用操作

一. Nginx 常用配置

1. Nginx 总配置文件

nginx 安装目录下的 nginx.conf 文件:

# 指定 Nginx worker 进程运行的系统用户
user  nginx;
# 自动根据 CPU 核心数启动相应数量的 worker 进程,充分利用多核。
worker_processes  auto;
# 自动将 worker 进程绑定到特定 CPU 核心,减少 CPU 缓存失效,提高性能。
worker_cpu_affinity auto;# 错误日志路径和日志级别
error_log  /var/log/nginx/error.log warn;
# 保存 Nginx 主进程 PID 文件的位置,方便管理。
pid        /var/run/nginx.pid;# 事件段
events {# 每个 worker 进程允许同时处理的最大连接数worker_connections  4096;# 避免多个 worker 同时争抢新连接,减少惊群效应(适合高并发)accept_mutex on;# worker 一次尽量多接收连接,而不是一次只接一个,提高吞吐量multi_accept on;
}# HTTP 段
http {# 加载文件类型与 MIME 类型的映射表。include       /etc/nginx/mime.types;# 默认 MIME 类型(找不到类型时按二进制流处理)。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  main;# 关闭响应头中 Nginx 版本号,防止暴露版本信息server_tokens  off; # 开启零拷贝机制,提高静态文件传输性能。sendfile        on;#tcp_nopush     on;# 限制客户端请求体大小(主要影响文件上传)client_max_body_size 50m;# 接保持时间(秒),超过这个时间空闲连接会关闭。keepalive_timeout  65;# 启用 Gzip 压缩,减少传输体积。gzip on;# 小于 1KB 的响应不压缩。gzip_min_length 1k;# 压缩级别(1~9,数字越大压缩比越高但 CPU 开销越大,6 是平衡值)。gzip_comp_level 6;# 让代理缓存知道有压缩版本。gzip_vary on;# 压缩数据的缓冲区数量和大小。gzip_buffers 16 8k;# 定义要压缩的内容类型(文本类、JSON、JS、XML、部分图片等)。gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif  application/x-protobuf application/octet-stream;# 载入 /etc/nginx/conf.d/ 目录下的所有 .conf 文件,通常这里会放各个站点或服务的具体 server 配置。include /etc/nginx/conf.d/*.conf;}

2. Nginx 子文件

nginx 安装目录下的 conf.d 文件夹下可以放置多个子配置文件

如: default.conf:

# 定义一个名字叫 ashen_servers 的上游服务器组
upstream ashen_servers {# 每个 ashen00x 是一个后端服务(IP 或主机名),端口是 8091。# 负载均衡权重(这里都是 1,表示均匀分配请求)。server ashen001:8091  weight=1;server ashen002:8091  weight=1;server ashen003:8091  weight=1;
}server {# 开启 443 端口,支持 HTTP/2 + SSL。listen 443 http2 ssl;# IPv6 支持。listen [::]:443 http2 ssl;# 该虚拟主机匹配 www.ashentest.com 域名请求server_name www.ashentest.com;# 指定 SSL 证书和私钥路径ssl_certificate /etc/nginx/ssl/www.ashentest.com.pem;ssl_certificate_key /etc/nginx/ssl/www.ashentest.com.key;# ssl验证相关配置# SSL 会话缓存有效期 5 分钟。ssl_session_timeout  5m;# 加密套件,禁止弱加密算法(!开头的表示禁用)。# 首选套件:椭圆曲线 Diffie-Hellman 临时密钥交换(ECDHE)、RSA 身份认证、AES128 位加密(GCM 模式)、SHA256 消息认证。# ECDHE:临时密钥交换,防止密钥被长期窃取。# ECDH:椭圆曲线 Diffie-Hellman(非临时密钥)。# AES:AES 对称加密算法。# HIGH:高强度加密套件(OpenSSL 内置标签)。# !NULL:禁用不加密的套件(纯明文传输)。# !aNULL:禁用匿名认证的套件(无身份验证,容易中间人攻击)。# !MD5:禁用基于 MD5 的套件(MD5 已被攻破)。# !ADH:禁用匿名 Diffie-Hellman。# !RC4:禁用 RC4 流加密(已不安全)。# !3DES:禁用 3DES(三重 DES,加密强度低且易受 Sweet32 攻击)。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!3DES;# 安全链接可选的加密协议# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;# 只允许 TLS 1.1 和 TLS 1.2(TLS 1.0 已废弃)# 指定允许的 TLS 协议版本。# TLSv1.1:比 TLSv1.0 安全,但现在已逐步弃用。# TLSv1.2:目前主流安全版本(支持 AES-GCM、SHA256 等现代套件)。ssl_protocols TLSv1.1 TLSv1.2;# 服务器优先使用自己选择的加密算法(增强安全)    ssl_prefer_server_ciphers on;# 最大请求体(文件上传等)300MBclient_max_body_size 300m;# 默认首页文件优先级:index.html → index.htm → index.nginx-debian.htmlindex index.html index.htm index.nginx-debian.html;# 根目录 location / {root   /usr/share/nginx/html;index  index.html index.htm;}# 前端配置location /webtest {alias /usr/share/nginx/html/webtest;index index.html index.htm;}# 配置跨域的前端服务location /yunkongzhixing{add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';if ($request_method = 'OPTIONS') {return 204;}alias /usr/share/nginx/html/yunkongzhixing;index index.html index.htm index.nginx-debian.html;}# 后端配置location /api-test {proxy_set_header Host $host;proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://192.168.1.111:8088/api-test;}# 配置负载均衡的服务location /ashen {proxy_set_header Host $host;proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://ashen_servers/ashen;}}server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}# 前端配置location /webtest {alias /usr/share/nginx/html/webtest;index index.html index.htm;}# 后端配置location /api-test {proxy_set_header Host $host;proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://192.168.1.111:8088/api-test;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html# 错误页面# 当返回 500/502/503/504 错误时,用 /usr/share/nginx/html/50x.html 显示自定义错误页面。error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}}

二. Nginx 四层代理

上面的配置主要是针对HTTP的七层代理模式, Nginx 通用支持 四层代理模式:

  1. OSI 模型的 第七层:应用层(HTTP、WebSocket、SMTP 等)
  2. OSI 模型的 第四层:传输层(TCP/UDP)

两层代理的核心区别:

对比项四层代理(L4)七层代理(L7)
处理层级只处理 TCP/UDP 流,不解析应用层数据解析 HTTP/HTTPS 等应用层协议
Nginx 模块stream {}http {}
代理方式类似 IP:PORT 的转发,透明传输基于 URL、Host、Header 等做路由
能否修改数据❌ 不能改应用层内容✅ 可以改请求头、响应内容
性能高(数据包转发快,延迟低)稍低(要解析、处理 HTTP 内容)
常用场景数据库代理、TCP 应用、负载均衡、SSL 透传Web 反向代理、API 网关、静态资源服务
负载均衡粒度IP+端口级URL、域名、Header、Cookie 级
示例转发 MySQL 3306、Redis 6379、HTTPS 443根据 URL 转发 /api 给后端,/static 给静态服务器

示例:


# 四层代理
stream {# 对 ashen_server 的代理, 需要负载均衡开起 upstreamupstream mongodb_server {server ashen001:8808;server ashen002:8808;}server {listen 18808;proxy_pass ashen_server;}# 对单个服务进去四层代理server {listen 18848;proxy_pass docloud003:8848;}}

三.Tomcat 和 Nginx 启用 gzip 压缩

1.Nginx启用GZIP压缩

需要修改 Nginx安装目录下的conf/nginx.conf文件

添加:

     gzip on;gzip_vary on;gzip_buffers 16 8k;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png;

在这里插入图片描述

然后重启Nginx

2.Tomcat启用 gzip 压缩

需要修改tomcat安装目录下的conf/server.xml文件

<Connector port="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"    compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata"   compressableMimeType="text/html,text/xml,text/javascript,application/javascript,text/css,text/plain,text/json"/>

在这里插入图片描述

然后重启tomcat

3.开启压缩后的效果

在这里插入图片描述

四.Nginx报Too many open files

Linux是有文件句柄限制的(open files),一般默认是1024,当超过这个数量便会报 Too many open files错误

1.查看默认文件句柄数

ulimit -a

在这里插入图片描述

2.增大允许打开的文件数

有两种修改方式:

2.1 命令行方式:
ulimit -n 65535

立即生效,对当前用户有效,重启后失效

2.2 修改系统配置文件
vim /etc/security/limits.conf

在文件最后加入:

* soft nofile 65535  
* hard nofile 65535

3.修改Nginx配置文件

worker_rlimit_nofile 65535;

在这里插入图片描述

4.重启 nginx

nginx -s reload

五.请求链接后缀带 / 和不带 /的区别

以 http://localhost:8080/test 和 http://localhost:8080/test/ 为例

  1. 带 / 通常表示访问的是一个目录。在 RESTful 风格的 API 中,这可能代表该目录下的资源集合。
    不带 / 通常表示访问的是一个具体的资源。它可以是一个文件或一个单独的资源实体。

  2. 不同的服务器或框架(如 Flask、Django、FastAPI 等)会根据 URL 结尾的 / 处理方式不同:

如果服务器严格区分: 这种情况下 /test 和 /test/ 会被视为完全不同的两个路由,如果没有对应的路由规则,就直接返回 404。

如果服务器启用了自动重定向: 服务器会自动返回一个 301 或 308 重定向 到正确的路径。

六.静态文件断点续传

1. 添加 nginx 配置

   location /download {alias /mnt/file/;add_header Content-Disposition: 'attachment';add_header  Content-Type application/octet-stream;}

2.将可下载的文件放在 /mnt/file/ 文件夹下即可

3.请求 http:/ip:port/download/ + "文件名称"即可

七. linux上 springboot项目接收 header 为 null

原因: 可能header中带下划线 "_ " , 经过 nginx 转发后, 会过滤掉该 header, 将下划线 “_” 改为 "-"即可

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

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

相关文章

PHP官方及第三方下载地址全指南(2025最新版)

PHP官方及第三方下载地址全指南&#xff08;2025最新版&#xff09; 本文整理了PHP官方及主流第三方下载渠道&#xff0c;包含PHP 5.5至8.4各版本的直接下载链接&#xff0c;助您快速获取安全可靠的PHP环境。 一、PHP官方下载渠道 1.1 全球主站下载 网址&#xff1a;https://…

深度剖析Redisson分布式锁项目实战

今天在练手项目中也是遇到了许多新的技术&#xff0c;其中我认为最深刻的还是Redisson分布式锁&#xff0c;这里我就结合一下我项目中用到Redisson分布式锁的代码来讲述一下Redisson分布式锁&#xff0c;希望可以帮助大家更深刻地理解这项技术。在之前的文章中我已经讲过Rediss…

第四天-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件

【ARXML专题】-构建CAN/CANFD通信系统:ARXML实战指南 汽车神经系统的"高速公路" 想象一辆现代汽车如同人体,电子控制单元(ECU)是器官,而CAN总线就是连接它们的神经系统。在自动驾驶时代,传统CAN2.0的"乡间小路"已无法满足数据传输需求,CANFD的"…

用架构建模工具Sparx EA绘制企业转型路线图

企业数字化转型面临诸多挑战&#xff1a;信息壁垒导致各部门协同困难&#xff0c;资源投入缺乏科学评估&#xff0c;潜在风险难以提前预判。这些问题不仅拖慢转型进程&#xff0c;还可能引发高昂的试错成本。 本文将阐述如何运用架构建模工具Sparx EA的核心功能——可视化路线…

STM32——GPIO

总 &#xff1a;STM32——学习总纲 参考资料&#xff1a; STM32F1系列参考手册-V10&#xff08;中&#xff09; 一、GPIO简介 1.1 GPIO 特点 1.2 GPIO 电气特性* stm32芯片资料STM32F103ZET6(English) 1.3 GPIO 引脚分布 电源引脚&#xff1a;V开头 晶振引脚&#xff1a; …

NUX MG-400 吉他效果器功能原理介绍

NUX MG-400 是一款多功能数字吉他效果器&#xff0c;它的核心原理就是把吉他的模拟信号&#xff0c;通过 A/D 转换变成数字信号 → 在 DSP 芯片上做建模运算 → 再通过 D/A 转换还原成模拟信号输出。 它的硬件 软件协作设计&#xff0c;基本可以拆成几个模块来看&#xff1a; …

Linux——进程管理和计划任务管理

文章目录前言一、程序与进程的关系1.1 程序与进程的定义1.2 父进程与子进程二、查看进程信息2.1 ps 命令&#xff08;重点&#xff09;2.2 动态查看进程信息top命令&#xff08;重点&#xff09;2.3 pgrep命令查询进程信息2.4 pstree命令以树形结构列出进程信息三、进程的启动方…

阿里云TranslateGeneral - 机器翻译SDK-自己封账单文件版本—仙盟创梦IDE

仙盟创梦IDE代码<?php /*** 阿里云机器翻译通用版API调用工具* 文档参考&#xff1a;https://help.aliyun.com/zh/machine-translation/developer-reference/api-alimt-2018-10-12-translategeneral*/ class AliyunTranslate {// 阿里云访问密钥private $accessKeyId;priva…

新字符设备驱动实验

经过前两章实验的实战操作&#xff0c;我们已经掌握了 Linux 字符设备驱动开发的基本步骤&#xff0c;字符 设备驱动开发重点是使用 register_chrdev 函数注册字符设备&#xff0c;当不再使用设备的时候就使用 unregister_chrdev 函数注销字符设备&#xff0c;驱动模块加载成功…

【更新公告】C++算法·线段树

之前的线段树知识都忘了qwq 现在在重新学线段树 下一篇就是写线段树了&#xff0c;例题已经找好了 A了1遍&#xff0c;但是用的玄学代码ee 下面是更新公告 更新公告 更新模式改为2~3天1篇 但是绝对高质量&#xff01;&#xff01; (平均质量分93够吗qwq) 如果例题好找尽量给出2…

pyqtgraph 库 右键菜单栏插件汉化

第一步&#xff0c;打开pyqtgraph文件夹。 第二步&#xff1a;打开graphicsItems&#xff0c;将PlotItem和ViewBox中的.py文件中的英文替换为中文&#xff0c;运行软件即可看到插件右键的菜单栏成为中文。 第三步&#xff1a;GraphicsScene中的&#xff0c;等找到相应的右键菜单…

docker镜像解决的一些问题

1 概述Docker镜像技术通过创新性的设计&#xff0c;彻底解决了应用交付领域的核心痛点&#xff0c;已经成为已成为云原生时代的事实标准。其核心价值在于​​通过标准化封装实现"一次构建&#xff0c;处处运行"​​&#xff0c;从根本上改变了软件交付的生命周期。2 …

10.从开始写LINUX内核——时钟中断

Linux 0.12 内核时钟中断实现&#xff1a;从初始化到中断响应时钟中断是操作系统中最基础且最重要的中断之一&#xff0c;它为系统提供时间基准&#xff0c;支持进程调度、定时器等核心功能。本文将基于 Linux 0.12 内核的 setup 程序框架&#xff0c;详细介绍时钟中断的完整实…

Effective C++ 条款45:运用成员函数模板接受所有兼容类型

Effective C 条款45&#xff1a;运用成员函数模板接受所有兼容类型核心思想&#xff1a;使用成员函数模板&#xff08;member function templates&#xff09;生成可接受兼容类型的函数&#xff0c;特别是泛型拷贝构造函数和赋值操作符&#xff0c;同时避免抑制编译器生成的默认…

华测科技(北京)的3D GPR数据分析

很高兴得到了张总的支持&#xff0c;获得了他们雷达的数据&#xff0c;并写了雷达数据读取和转换文件。1 背景搜索后发现 华测科技&#xff08;北京&#xff09;有限公司 的实力很强&#xff0c;因为他们的检测可达100km/h的时速。以前我只知道行业内 青岛中电众益 的3D GPR产…

X86、ARM与C86架构全面对比分析:性能、功耗、成本与生态系统

目录标题X86、ARM与C86架构全面对比分析&#xff1a;性能、功耗、成本与生态系统一、架构概述与发展背景1.1 X86架构&#xff1a;PC与服务器市场的传统霸主1.2 ARM架构&#xff1a;移动领域的王者与新兴服务器力量1.3 C86架构&#xff1a;国产x86兼容的创新尝试二、性能表现对比…

w嵌入式分享合集66

自己的原文哦~ https://blog.51cto.com/whaosoft/14132240 一、STM32的NRST管脚异常复位问题 这个问题是客户对开发的平台做EMS 浪涌测试的时候发生的&#xff0c;平台上使用了一个STM32G474 RCT6 MCU 。在某个等级的EMS 测试中&#xff0c; 客户发现MCU有时候会异常…

ZKmall开源商城的数据校验之道:用规范守护业务基石

在电商系统里&#xff0c;数据就像流淌的血液 —— 用户填的手机号、下单的商品数量、支付的金额&#xff0c;每一个数字、每一段文字都得靠谱。要是数据出了错&#xff0c;轻则订单下不了&#xff0c;重则钱货两空。ZKmall 开源商城作为一个分布式电商系统&#xff0c;每天要处…

QML实现数据可视化

界面样式 项目开发流程 1.通过QtCreator创建一个Qt Quick插件,插件命名为CarPanMod; 2.通过QtCreator创建一个Qt Quick Application,命名为QmlPro; 3.在插件CarPanMod中实现条形图,折线图和饼状图的绘制; 4.在应用程序QmlPro中,添加插件的导入路径; 5.在应用程序中,通过i…

实时计算 记录

《大数据架构师》海量实时广告流平台架构设计与实践 《架构师必备技能之集群资源评估.pdf》 参考&#xff1a; 大型广告系统架构与实现 架构图