Nginx深度优化

简介

1.隐藏版本号
2.修改Nginx用户与组
3.配置Nginx网页缓存时间
4.实现Nginx的日志切割
5.配置Nginx实现连接超时
6.更改进程数
7.配置Nginx实现网页压缩功能
8.配置Nginx实现防盗链
9.FPM模块进行参数优化

实验环境

  • 系统环境:CentOS7.4
  • 服务器IP地址:192.168.100.71
  • 客户端IP地址:192.168.100.72
  • yum挂载目录:/mnt/sr0
  • 相关源码包下载地址:百度云下载 ??密码:uhzm

搭建步骤

一、配置Nginx隐藏版本号

在生产环境中,需要隐藏Nginx的版本号,以避免安全漏洞的泄漏,使×××者不能针对特定版本进行×××

方法一:修改配置文件法

1、修改主配置文件

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

2、重启Nginx服务

[[email protected] ~]# nginx -t

[[email protected] ~]# service nginx restart #重启服务

3、测试

[[email protected] ~]# curl -I http://192.168.100.103

方法2:修改源码法

1、安装相关工具包

[[email protected] ~]# yum -y install gcc gcc-c++ pcre-devel zlib-devel

2、创建Nginx进程用户

[[email protected] ~]# useradd -M -s /sbin/nologin nginx

3、解压Nginx

[[email protected] ~]# tar xvf nginx-1.6.0.tar.gz -C /usr/src/

4、修改源码文件

[[email protected] ~]# cd /usr/src/nginx-1.6.0/src/core/
[[email protected] core]# vim nginx.h

5、配置、编译及编译安装

[[email protected] core]# cd /usr/src/nginx-1.6.0/
[[email protected] nginx-1.6.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_stub_status_module

参数解析:

prefix #指定安装位置
user=nginx #指定nginx系统用户
group=nginx #指定组
with-http_stub_status_module #指定统计模块

[[email protected] nginx-1.6.0]# make && make install#编译及编译安装

6、优化路径

[[email protected] nginx-1.6.0]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

7、编辑Nginx服务脚本

[[email protected] ~]# vim /etc/init.d/nginx

添加以下脚本:

#!/bin/bash
# chkconfig: 35 99 20
# description:Nginx Server Control Script
PROG="/usr/local/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 (start|stop|restart|reload)"
exit 1 #非正常退出
esac
exit 0 #正常退出

[[email protected] ~]# chmod +x /etc/init.d/nginx #赋予权限
[[email protected] ~]# chkconfig --add nginx #添加系统服务
[[email protected] ~]# service nginx start

8、测试

[[email protected] ~]# curl -I http://192.168.100.103

二、修改Nginx用户与组

Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制,Nginx默认使用nobody用户账号与组账号,一般也要进行修改

方法1:编译安装时指定

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx …… 略

方法2:修改配置文件

1、修改主配置文件

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

2、重启Nginx服务

[[email protected] ~]# service nginx restart

3、测试

[[email protected] ~]# ps aux | grep nginx

三、配置网页缓存时间

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

1、编辑默认首页

[[email protected] ~]# cp qingzi.jpg /usr/local/nginx/html/ #将测试图片拷贝到站点目录下
[[email protected] ~]# cd /usr/local/nginx/html/
[[email protected] html]# vim index.html #编辑默认首页

2、编辑主配置文件

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

3、重启服务

[[email protected] ~]# service nginx restart

4、测试

四、实现Nginx的日志切割

随着Nginx运行时间的增加,产生的日志也会增加,为了方便掌握Nginx的运行状态,需要时刻关注Nginx日志文件,而太大的日志文件对监控是一个大灾难。Nginx没有类似Apache的crolog日志分割处理的功能,但是,可以通过Nginx的信号控制功能的脚本来实现日志的自动切割,并将脚本加入到Linux的计划任务中,让脚本在每天的固定时间执行,便可实现日志分割功能

1、编辑日志分割脚本

[[email protected] ~]# vim /opt/fenge.sh

添加以下脚本信息:

#!/bin/bash
# Filename:fenge.sh
d=$(date -d "-1 day" "+%Y%m%d") #获取当前时间的前一天,也就是往前推一天
logs_path="/var/log/nginx" #指定保存Ngixn日志路径
pid_path="/usr/local/nginx/logs/nginx.pid" #Nginx进程ID路径
[ -d $logs_path ] || mkdir -p $logs_path #判断定义的路径是否存在,不存在创建目录
mv /usr/local/nginx/logs/access.log $logs_path/bt.com-access.log-$d #将Nginx剪切至定义的目录下,并且用日期定义名称
kill -USR1 $(cat $pid_path) #平滑重载Nginx服务
find $logs_path -mtime +30 | xargs rm -rf #文件最后修改的时间超过30天,直接删除

[[email protected] ~]# chmod +x /opt/fenge.sh #添加执行权限

2、测试脚本

[[email protected] ~]# date #查看当前时间

[[email protected] ~]# sh /opt/fenge.sh #执行脚本
[[email protected] ~]# ls /var/log/nginx/

[[email protected] ~]# date -s 07/17/18 #将时间往后推1天(7月17号)

[[email protected] ~]# ll /var/log/nginx/

3、引入周期性计划任务

[[email protected] ~]# crontab -e

30 1 * /opt/fenge.sh #每天凌晨01:30定期执行脚本自动进行

五、配置Nginx实现连接超时

在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间

1、修改主配置文件

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

2、重新启动Nginx服务

[[email protected] ~]# service nginx restart

3、测试

六、更改进程数

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

1、查看Nginx运行的个数

[[email protected] ~]# ps aux | grep ‘nginx‘

2、查看物理CPU核数

[[email protected] ~]# cat /proc/cpuinfo | grep -c "physical"

3、修改主配置文件

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

4、重启服务

[[email protected] ~]# service nginx restart

5、再次查看Nginx运行的个数

七、配置Nginx实现网页压缩功能

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

1、修改主配置文件

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

添加以下参数:

gzip on:开启gzip #压缩输出
zip_min_length 1k #用于设置允许压缩的页面最小字节数,低于1k不压缩
gzip_buffers 4 16k #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzp压缩结果
gzip_http_version 1.0 #用于设置识别http协议版本,默认是1.1
gzip_comp_level 2 #用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理速度最慢,使用默认即可
gzip_types text/plain #压缩类型,是就对哪些网页文档启用压缩功能,类型与类型之间用空格隔开,可以指定多个
gzip_vary on #选项可以让前端的缓存服务器缓存经过gzip压缩的页面

八、配置Nginx实现防盗链

在企业网站服务中,一般都要配置防盗链功能以避免网站内容被非法盗用,造成经济损失。Nginx防盜链功能也非常强大。在默认情况下,只需要进行简单的配置,即可实现防盗链处理

实验环境

IP地址 域名 用途
192.168.100.103 www.bt.com 源主机
192.168.100.20 www.test.com 盗链网站

1、源主机测试页面

2、盗链网站盗用源主机图片

[[email protected] ~]# vim /usr/local/nginx/html/index.html #编辑默认首页

3、访问测盗链网站测试页面

4、源主机配置防盗链

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf #编辑主配置文件

[[email protected] ~]# nginx -t #检测语法

[[email protected] ~]# service nginx restart #重启Nginx服务

5、测试

九、FPM模块进行参数优化

Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
[[email protected] etc]# vim php-fpm.conf

pid = run/php-fpm.pid #确定pid文件位置
pm = dynamic #动态方式
pm.max_children=50 #最大启动进程数量是50个,相当于水桶,代表桶的容积
pm.start_servers = 20 #启动时开启的进程数进程是20个
pm.min_spare_servers = 5 #最小空闲进程数是5个,低于这个数,每秒钟会产生一个新的进程
pm.max_spare_servers = 20 #最大空闲进程数是20个,客户不连接PHP,最多允许的空间进程数

原文地址:http://blog.51cto.com/11905606/2162135

时间: 2024-08-02 22:23:12

Nginx深度优化的相关文章

Nginx深度优化(二)

Nginx作为现在最流行的Web应用程序,对其优化十分重要.通过Nginx初步优化.深度优化Nginx(一)已经可以对Nginx进行大量的优化来满足基本的需要,但是作为一名合格的运维工程师来说,仅仅掌握以上对Nginx进行优化的方法显然是远远不足的.所以就需要本篇博文进一步对Nginx进行优化. 博文大纲:一.安装nginx服务器二.Nginx配置优化(1)Nginx 运行工作进程个数(2)Nginx 事件处理模型 (3)开启高效传输模式(4)连接超时时间(5)fastcgi调优(6)expir

大型网站MySQL深度优化揭秘 2

学无止境,老男孩教育成就你人生的起点! 相信自己相信老男孩!!! 老男孩-51cto-公开课-大型网站MySQL深度优化揭秘 部分整理有没跟上的抱歉 ? 目 录 大型网站MySQL深度优化揭秘????2 第1章 优化的思路和线路????2 1.1 网站优化的思路????2 1.2 MySQL优化,nginx这样的东西怎么优化?????2 第2章 硬件层面优化????3 2.1 数据库物理机????3 2.1.1 CPU????3 2.1.2 Memory????3 2.1.3 disk(磁盘IO

老男孩教育每日一题-第87天-Nginx需要优化哪些内容?

参考答案: 1.gzip压缩优化2.expires缓存优化3.网络IO事件模型优化4.隐藏软件名称和版本号5.防盗链优化6.禁止恶意域名解析7.禁止通过IP地址访问网站.8.HTTP请求方法优化.9.防DOS攻击单IP并发连接的控制,与连接速率控制.10.严格设置Web站点目录的权限.11.将Nginx进程以及站点运行于监牢模式(nginx服务降权启动(不能使用80端口,使用其他端口,例如8080).站点目录设置普通用户).12.通过robot协议以及HTTP_USER_AGENT防爬虫优化13

LAMP和LNMP深度优化

LAMP与LNMP web架构深度优化 企业连接数据库一般用域名,因为连接数据库的文件可能有多个,那么当一旦数据库ip改了,那么数据库连接的文件也都需要修改,这样极容易漏掉而出现错误,正确的做法是每个数据库连接文件里都写连接数据库的域名,然后在本地host里将数据库ip及域名做一个解析 数据库tar备份数据文件 必须停机才能保持备份的数据库和线上的一致,那么企业是不可能随意停机的,所以一般会用到热备工具如mysqldump等进行实时同步备份. 必须要总结的: nginx.conf httpd.c

Java电商秒杀系统深度优化 从容应对亿级流量挑战

第1章 课程导学[学前须知]本章对这门课程进行说明,包括:电商秒杀场景的介绍.秒杀系统涉及模块的介绍,秒杀核心的知识点的介绍,课程的学习规划等. 第2章 秒杀项目框架回顾[秒杀免费课程场景解析,源码走读]本章会介绍前期秒杀免费课程当中所涉及的基础框架搭建知识,项目分层,源码导读等,帮助大家更快的理解秒杀的基础项目,为后续更深一步的课程学习打基础.如果小伙伴们对免费课相关内容已经非常熟悉,可以跳过此章! 第3章 云端部署,性能压测[从本地调试到云端上线的必经之路]本章结合前面的秒杀项目介绍了他在云

nginx基本优化

1.1   隐藏nginx header里版本号信息 1.2   更改源码隐藏软件名称及版本号 1.3   更改掉nginx默认用户及用户组(worker进程服务用户优化) 1.4   配置nginx worker进程个数 1.5   根据cpu核数进行nginx进程优化 1.6   nginx事件处理模型优化 1.7   调整nginx worker单个进程允许的客户端最大连接数 1.8   配置nginx worker进程最大打开文件数 1.9   开启高效的文件传输模式 1.10  设置连

实训之countdown深度优化

今天开始我们为期三周的实训,讲道理很紧张.我们两个多月的时间,小组成员磨合的非常好,可以说是有点默契的程度了,凝聚力明显提高.今天的分组之后立马投入这次实训中. 首先要确定我们这次实训目标,我们选择了继续强化我们的项目.在前段时间配合的不是很理想到通力合作做出粗略的基本功能的实现,我们每个人都付出了很多.这次我们希望继续深入下去这个项目,让它不再是一个简单的功能性软件,我们打算加入一些全新的功能点进去,让这个项目成为我们之前规划中小巧简便实用性高的产品. 首先我们希望加入登录注册,在使用过程中可

nginx 配置优化的几个参数

nginx 配置优化的几个参数 2011-04-22 本文地址: http://blog.phpbean.com/a.cn/7/ --水平有限欢迎指正-- -- 最近在服务器上搞了一些nginx 研究了一下 总结总结Sleep nginx配置文件里面需要注意的一些参数 worker_processes 8 nginx要开启的进程数 一般等于cpu的总核数 其实一般情况下开4个或8个就可 我开2个 以了 多了没有太多用 每个nginx进程消耗的内存10兆的模样 worker_cpu_affinit

nginx + SSL优化配置

nginx + SSL优化配置: 1 #http段添加如下配置项: 2 3 http { 4 5 ssl_prefer_server_ciphers on; #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件. 6 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #协议安全设置 7 ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #加密套件 ssl_ciph