Nginx服务优化

2023-10-31

配置nginx隐藏版本号

隐藏nginx版本号,避免安全漏洞泄漏

 

方法一:修改配置文件法

[root@www conf]# vim /usr/local/nginx/confnginx.conf



17 http {
18     include       mime.types;
19     default_type  application/octet-stream;
20 
21     server_tokens off;     #添加这个关闭版本号的命令

 方法二:改掉版本号

[root@www nginx-1.24.0]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module



[root@www nginx-1.24.0]# make -j2 && make install

 修改nginx用户与组

nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制

nginx默认使用nobody用户账号与组账号

方法:

  • 编译安装时指定用户与组
  • 修改配置文件指定用户与组
[root@www nginx-1.24.0]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \       编译时指定用户
> --group=nginx \      编译时指定组
> --with-http_stub_status_module

 配置nginx网页缓存时间

  • 当nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度
  • 一般针对静态网页设置,对动态网页不设置缓存时间

 设置方法

修改配置文件,在http段、或者server段、或者location段加入对特定的过期参数

 日志分割

  • 随着nginx运行时间增加,日志也会增加。为了方便掌握nginx运行状态,需要时刻关注nginx日志文件
  • nginx自身不具备日志分割处理的功能,但可以通过nginx信号控制功能的脚本实现日志的自动切割
  • 通过linux的计划任务周期性地进行日志切割

#!/bin/bash
#fenge rizhi 
d=$(date -d "-1 day" "+%Y%m%d")

logpath="/var/log/nginx"   #定义变量获取前一天时间的格式

nginx_home="/usr/local/nginx"  #定义变量指定nginx的工作目录

pidpath="$nginx_home/logs/nginx.pid"  #定义变量指定nginx的pid文件路径

##########main###########

if [ ! -d $logpath ];then
mkdir $logpath   #判断存放日志的目录是否存在,如果不存在就创建
fi

mv $nginx_home/logs/access.log $logpath/access.log-$d #执行日志分割操作,将日志移动到指定目录,并以指定时间格式保存
mv $nginx_home/logs/error.log $logpath/error.log-$d

kill -USR1 $(cat $pidpath) #重新加载日志文件


find $logpath -mtime +90 -delete  #删除90天之前的日志文件

 

 配置nginx实现连接超时

  • 为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
  • 超时参数
  • Keepalive_timeout   设置连接保持超时时间
  • Client_body_timeout  设置请求体读超时时间

keepalive_timeout
指定KeepAlive的超时时间(timeout)。指定一个长连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 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)。

 更改nginx运行进程数

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞

 修改配置文件的worker_processes参数

  • 一般设为CPU的个数或者核数
  • 在高并发情况下可设置为CPU个数或者核数的2倍

增加进程数,可减少了系统的开销,提升了服务速度

使用ps aux查看运行进程数的变化情况 

 

 

[root@www conf]# cat /proc/cpuinfo | grep -c "physical id"
2
#查看cpu核数

ps aux | grep nginx							#查看nginx主进程中包含几个子进程


 默认情况下,nginx的多个进程可能跑在一个cpu上,可以分配不同的进程给不同的cpu处理,充分利用硬件多核多cpu

例:在一台2核服务器,进行配置,将进程进行分配

 配置nginx网页压缩功能

Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
压缩功能参数

gzip on;							#取消注释,开启gzip压缩功能
   gzip_min_length 1k;      		#最小压缩文件大小
   gzip_buffers 4 64k;      		#压缩缓冲区,大小为4个64k缓冲区
   gzip_http_version 1.1;   		#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
   gzip_comp_level 6;       		#压缩比率
   gzip_vary on;					#支持前端缓存服务器存储压缩页面
   gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;		#压缩类型,表示哪些网页文档启用压缩功能
...... 
 36     gzip  on;
 37     gzip_min_length 1k;
 38     gzip_buffers 4 64k;
 39     gzip_http_version 1.1;
 40     gzip_comp_level 6
 41     gzip_vary on;
 42     gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg     image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
 

打开36行注释,添加以下命令

 配置防盗链

web源网站

 盗链网站主机

 

 设置防盗链

~* \.(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片;
none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的),如 http://www.kgc.com/game.jpg
我们使用 http://www.kgc.com 访问显示的图片,可以理解成 http://www.kgc.com/game.jpg 这个请求是从 http://www.kgc.com 这个链接过来的。
blocked:允许不是http://开头的,不带协议的请求访问资源; 
*.kgc.com:只允许来自指定域名的请求访问资源,如 http://www.kgc.com

if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作,即进行重写或返回 403 页面。

[root@www conf]# vim /usr/local/nginx/conf/nginx.conf


45     server {
 46         listen       80;
 47         server_name  www.accp.com;  #最好修改域名
 48 
 49         #charset koi8-r;
 50 
 51         #access_log  logs/host.access.log  main;
 52 
 53         location / {
 54             root   html;
 55             index  index.html index.htm;
 56         }
 57 
 58         location ~\.(html|htm|jpg)$ {
 59             root html;
 60             expires 1d;
 61 
 62           valid_referers none blocked *.accp.com;    #防盗链配置
 63            if ($invalid_referer) {
 64               rewrite ^/ http://www.accp.com/error.png;
 65            }
 66          }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx服务优化 的相关文章

  • Nginx no-www 到 www 以及 www 到 no-www

    我在用按照教程在 Rackspace 云上安装 nginx http www howtoforge com running phpmyadmin on nginx lemp on debian squeeze ubuntu 11 04并在网
  • 验证来自两个不同 URL 的 Keycloak 令牌

    我有一个Docker compose具有后端和前端组件的基于系统 后端写的是Python Flask并在多个 docker 容器中运行 前端编写为TypeScript with Angular 前端通过Restful API与后端进行通信
  • 为什么在生产中得到空 CSS 文件?

    我在文件中放入了很多css文件active admin css scss Active Admin s got SASS import active admin mixins import active admin base import
  • Docker 与 nginx 组合不断显示欢迎页面

    我是新来的docker并尝试使用最简单的 docker compose yml 显示一个 hello world 页面 并在此基础上构建最终完整的LEMP堆栈它将与我的服务器具有相同的配置 然而大多数教程已经过时 并且有很多使用方法dock
  • uWSGI重启时停机

    每次当我有代码更新时重新启动服务器时 我都会遇到 uwsgi 问题 当我使用 sudo restart account 重新启动 uwsgi 时 停止和启动实例之间存在一个小间隙 导致停机并停止所有当前请求 当我尝试 sudo reload
  • 比较 nginx+Apache+mod_wsgi 与 nginx+uWSGI?

    在生产中使用 nginx Apache mod wsgi 与 nginx uWSGI vurtualenv 有何优缺点 我在自 2007 年以来开发的 mod wsgi 中看到了第一个变体的优点 并且具有更稳定的版本和易于管理 第二种变体的
  • 如何设置带有子域和反向代理且不使用启用站点的 nginxconf?

    我读到没有必要使用sites enabled https stackoverflow com questions 41303885 nginx do i really need sites available and sites enabl
  • 在“git pull”我的 Django 项目后重新启动/重新加载 Gunicorn(通过 Upstart)的更好方法

    我正在寻找比sudo restart projectname每次我发出git pull origin master 它会下载我对 Django 项目的最新更改 这restart我相信该命令与 Upstart 有关 我用它来启动 停止我的 G
  • Node + Express + Nginx 未设置 Cookie

    我有一个使用 Express 的 Node 应用程序 我尝试为我的客户端设置 cookie 它在本地环境 http 上运行良好 但是一旦我投入生产 https 我就很好地收到了cookie 我可以在响应中看到它 但它没有设置 任何想法 Ng
  • 当请求太大时,Nginx(我认为)会以错误的权限保存文件

    所以 我对托管和 Linux 等都是完全陌生的 所以如果我说错了 请原谅我 我还在学习 我正在使用 Django 创建一个小型个人网站 我想把它放到网上看看是否一切正常 我从 linode 买了一台便宜的服务器 并使用 Digital Oc
  • 如何将多个域路由到多个节点应用程序?

    我习惯了典型的 Lamp Web 托管环境 您只需单击 cpanel 中的几个按钮 您的域就会被分区并映射到 htdocs 中的文件夹 我经常使用 Node js 但做同样的事情似乎并不那么简单 如果我有多个节点应用程序 并且我想将doma
  • Nginx 背后的多个 Meteor 站点

    这个问题与this https stackoverflow com questions 10936242 how can i correct the meteor base url in a nginx reverse proxy conf
  • NGinx 域名重定向

    假设我有一个名为 xyz co 的网站 我还有其他具有相同前缀的域名 例如 xyz com xyz it xyz co it 现在 nginx 与端口 80 的 nginx conf 中的 server name xyz co 配合得很好
  • kubernetes nginx ingress 无法将 HTTP 重定向到 HTTPS

    我有一个托管在 Google Cloud 平台中的网络应用程序 该应用程序位于负载均衡器后面 而负载均衡器本身位于入口后面 入口设置了 SSL 证书 并按预期接受 HTTPS 连接 但有一个问题 我无法让它将非 HTTPS 连接重定向到 H
  • Docker:Nginx 和 php5-fpm docker 不说话

    我想进行完全 Docker 化的 Drupal 安装 我的第一步是让容器与 Nginx 和 php5 fpm 一起运行 两者都基于 Debian 我在 CoreOS alpha 频道 使用 Digital Ocean 我的 Dockerfi
  • Nginx反向代理返回404

    我的 Nginx 安装并运行 下面是配置 etc nginx nginx conf 我要全部转发 api 到我的 tomcat 服务器 该服务器在同一服务器上的端口 9100 上运行 类型http myhost 9100 api apps有
  • 如何正确链接 php-fpm 和 Nginx Docker 容器?

    我正在尝试链接 2 个单独的容器 nginx 最新 https registry hub docker com nginx php fpm https registry hub docker com php 问题是 php 脚本不起作用 也
  • nginx 匹配位置中的特定单词

    我在匹配 nginx request body 变量中的特定单词时遇到问题 如果正文请求中有特殊单词 我想代理传递 所以我的方法是这样的 location php if request body proxy pass http test p
  • nginx server_name 在流块内可能吗?

    目前设置如下 stream server listen 9987 udp server name subdomain EXAMPLE com this line is resulting in an error proxy pass loc
  • nginx代理认证拦截

    我有几个服务 它们支持 nginx 实例 为了处理身份验证 在 nginx 中 我拦截每个请求并将其发送到身份验证服务 在那里 如果凭据正确 我将设置一个包含用户相关信息的 cookie 现在 请求应该被路由到适当的服务 并设置 cooki

随机推荐

  • python自动化之models 进阶操作二

    PUBLIC METHODS THAT ALTER ATTRIBUTES AND RETURN A NEW QUERYSET def all self 获取所有的数据对象 def filter self args kwargs 条件查询 条
  • hive--分组排序函数

    分组排序 最主要的区别就是如果两个分数相同 排名是否同列以及排名是否相同 这个方法仅在mysql8 0以后 hive或其他数据库支持 直接看图 原始表 原表如上 想要的结果如下 从图中可以发现 row number函数 如果并列但名次反而不
  • (四十四)数据字典-树状treeview树的实现

    数据字典 treeview树的实现 什么是数据字典 顾名思义数据字典 数据 字典 字典是用来查询东西的 所以数据字典就是描述数据信息的集合 数据字典是一种通用的程序设计方法 程序中有很多主体 每个主体的都有很多属性 每种属性都有很多取值并且
  • Python中的变量与常量

    目录标题 一 变量 1 什么是变量 2 python代码中变量的展示和练习 3 用画图的形式展示变量 变量值与内存之间的关系 二 常量 1 什么是常量 2 python中的常量 一 变量 1 什么是变量 程序运行过程中 值会发生变化的量 也
  • xshell连接centos7虚拟机时显示SSH服务器拒绝了密码

    xshell连接centos7虚拟机时显示SSH服务器拒绝了密码 这个问题可能有以下几个原因 1 SSH服务未启动或未安装 在CentOS上安装SSH服务 可以使用以下命令 sudo yum install openssh server 然
  • xp服务器文档在哪里设置密码,xp ftp服务器设置密码

    xp ftp服务器设置密码 内容精选 换一换 登录Windows操作系统的弹性云服务器时 需使用密码方式登录 因此 用户需先根据创建弹性云服务器时使用的密钥文件 获取该弹性云服务器初始安装时系统生成的管理员密码 Administrator帐
  • Visual Studio2019中源文件 <bits/stdc++.h>无法打开解决方法

    在Visual Studio2019中创建stdc h文件 将下面代码保存文件当中 C includes used for precompiling C Copyright C 2003 2015 Free Software Foundat
  • MySQL介绍,SQL入门及表结构分析

    数据库分类 关系型数据库 SQL 通过表与表之间 行与列之间的关系去存储数据 如MySQL Oracle 两者本质都是DBMS 数据库管理系统 非关系型数据库 No SQL意为Not only SQL 通过对象自身属性去存储 如Redis
  • git cherry-pick使用总结

    第一次在csdn发文章 还没找到节奏 请多多指教 这次给大家介绍一下Git中常用的cherry pick cherry pick的作用 将现有的某个提交应用到当前分支上 git cherry pick edit n m parent num
  • QComboBox类的使用,下拉列表框的触发:activated与currentIndexChanged的区别

    一 介绍 QcomboBox属于继承自QWidget 给用户提供一种呈现选项列表的方式 作用 使其占最小的控件 列举最多的选项供用户选择 二 触发条件 当前用户点击所选的具体列表项 两种触发方式 1 void currentIndexCha
  • Redis学习笔记五:redis主从复制

    通常使用redis时 如果redis存储的是一些非常重要的数据 那么只配置一台服务器的redis是有风险的 以为如果主服务器宕机 影响到正常业务之外 最终要的是数据的丢失 因此我们常常会配置多台redis做集群 除了防止主机宕机 我们还可以
  • 【AI视野·今日CV 计算机视觉论文速览 第166期】Mon, 28 Oct 2019

    AI视野 今日CS CV 计算机视觉论文速览 Mon 28 Oct 2019 Totally 47 papers 上期速览 更多精彩请移步主页 Interesting 联合显著性检测 提出了一种从单张图像中检测出具有相似语义属性的物体显著性
  • [转]一文看懂区块链架构设计 - 从概念到底层技术

    前言 区块链作为一种架构设计的实现 与基础语言或平台等差别较大 区块链是加密货币背后的技术 是当下与VR虚拟现实等比肩的热门技术之一 本身不是新技术 类似Ajax 可以说它是一种技术架构 所以我们从架构设计的角度谈谈区块链的技术实现 无论你
  • 广西人才网实习信息爬取与数据库存储实战

    广西人才网实习信息爬取与数据库存储实战 https www gxrc com 大家好 我是W 项目介绍 本项目为CrawlSpider结合MySQL MongoDB爬取求职网站信息的项目 目标是将网站指定分类下的招聘信息 包括 职位名称 公
  • Jupyter Notebook导入和删除虚拟环境

    在Jupyter Notebook中加载虚拟环境 比如现在我创建了一个虚拟环境名为pytorch 那么首先我先进入虚拟环境 activate pytorch Linux下需要使用source activate 然后运行 conda inst
  • Android init.rc整理

    AIL概述 init rc由AIL语言编写而成 可以参考system core init README md来学习AIL语法相关知识 不同Android版本关于AIL的说明存在一些细微差异 但基本语法和总的思路是不变的 往往我们可以先查看对
  • 2021哈工大机器翻译实验室经验贴(回忆版)

    哈工大机器翻译实验室 有两轮 一轮笔试 一轮面试 第一轮笔试题 根据本人的回忆 3道简答 5道编程题 60分钟 一 简答题 1 Windows下的软件Office 在Ubuntu环境下能否运行 说明理由 2 已知账户名和账户密码 说明登录到
  • 反射与线程间通讯

    反射 一 在运行状态中 对于任意一个类 都能够获取到这个类的所有属性和方法 对于任意一个对象 都能够调用它的任意一个方法和属性 包括私有的方法和属性 这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制 通俗点讲 通过
  • 设置linearlayout最大高度_数据中心:主要设备用房高度需求及建筑层高规划

    主要设备用房高度需求 数据中心主要设备用房为35KV开闭所 10KV开闭所 低压变配电房 动力 低压变配电房 IT UPS 柴油发电机组 冷冻机房 IT机房模块间等 35KV开闭所通常单独设置不在IT机房大楼内布置 本文不再讨论 各设备用房
  • Nginx服务优化

    配置nginx隐藏版本号 隐藏nginx版本号 避免安全漏洞泄漏 方法一 修改配置文件法 root www conf vim usr local nginx confnginx conf 17 http 18 include mime ty