Nginx调优

本文详细介绍了如何对Nginx进行性能调优,包括隐藏Nginx版本号以提高安全性,安装部署及依赖处理,设置运行账号,调整进程数,配置CPU亲和力,优化文件打开数,以及http主体的优化如开启高效传输模式,设置长连接超时时间,限制文件上传大小等。此外,还涉及了gzip压缩、expires缓存调优、日志切割、目录文件访问控制和IP与301跳转的优化策略,确保Nginx运行高效且安全。
摘要由CSDN通过智能技术生成

目录

1、 Nginx简介

1.1、Nginx官网

 2、隐藏nginx版本号

 2.1、安装部署nginx

2.1.1、上传软件包并解压

2.1.2、更改源码隐藏软件名称和版本号

2.2、安装nginx依赖

 2.3、预编译

2.4、预编译安装

2.5、启动nginx

 2.6、查看端口号

2.7、测试

 2.8、网站测试

 2.9、配置文件nginx.conf

 3、修改nginx运行账号

 3.1、查看nginx当前运行账号​编辑

 3.2、添加path变量

3.3 重载nginx

3.4、nginx服务管理脚本

3.5、配置服务开机自动启动

 4、nginx进程

 5、设置Nginx运行进程个数

 5.1、设置nginx中进程数

 5.2、查看nginx进程数

 6、Nginx运行CPU亲和力

6.1、4核4线程配置

 6.2、那么如果我是4线程的CPU,我只想跑两个进程呢?

7、Nginx最多可以打开文件数

7.1、设置nginx最大可打开的文件数

7.2、修改系统可以打开的最大文件数

7.2.1、临时修改

7.2.2、永久修改

8、 Nginx事件处理模型

 8.1、单个进程允许客户端最大并发连接数

 9、http主体优化

9.1、开启高效传输模式开启高效传输

9.2、长连接超时时间

9.3、文件上传大小限制

9.4、location匹配

 9.5、gzip调优

9.5.1、启用gzip

 9.5.2、拷贝测试文件

9.5.3、测试

 9.6、expires缓存调优

9.6.1、以扩展名区分

9.6.2、 对目录及其进行判断

 9.6.3、expire功能缺点


1、 Nginx简介

        Nginx ("engine x") 是一个轻量级、高性能的WEB服务器软件和反向代理服务器(即用户直接访问反向代理服务器就可以获得目标服务器的资源)。Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
 
       Nginx以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。
 
       由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,如百度BWS、新浪、网易、腾讯等。本文详细介绍nginx源码安装的同时并对nginx进行优化配置。

nginx的优点:

1.高并发。静态小文件
2.占用资源少。2万并发、10个线程,内存消耗几百M。
3.功能种类比较多。web,cache,proxy。
4.支持epoll模型,使得nginx可以支持高并发。
5.nginx 配合动态服务和Apache有区别。(FASTCGI 接口)
6.利用nginx可以对IP限速,可以限制连接数。
7.配置简单,更灵活。

1.1、Nginx官网

Nginx官网:  http://nginx.org

Nginx官方文档: http://nginx.org/en/docs/

 Nginx官网下载地址: http://nginx.org/en/download.html

 2、隐藏nginx版本号

问:为什么要隐藏??
答:为了安全,如果暴露版本信息,有可能黑客可以通过版本信息,得知该版本存在的漏洞,进而对服务器进行攻击。

 2.1、安装部署nginx

2.1.1、上传软件包并解压

[root@cong11 ~]# ls
anaconda-ks.cfg  nginx-1.10.3.tar.gz
[root@cong11 ~]# tar -zxvf nginx-1.10.3.tar.gz -C /usr/local/src/

2.1.2、更改源码隐藏软件名称和版本号

[root@cong11 ~]# cd /usr/local/src/nginx-1.10.3/  
[root@cong11 nginx-1.10.3]# vim src/core/nginx.h 

修改标红部分

 #define NGINX_VERSION      "8.8.8"    #修改版本号

 #define NGINX_VER          "web/" NGINX_VERSION #修改服务器名称

 [root@cong11 nginx-1.10.3]# vim src/http/ngx_http_header_filter_module.c

static char ngx_http_server_string[] = "Server: web" CRLF;  #修改标红部分

#修改HTTP头信息中的server字段,防止回显具体版本号

        这个文件定义了http错误码的返回,有时候我们页面程序出现错误,Nginx会代我们返回相应的错误代码,回显的时候,会带上nginx和版本号,我们把他隐藏起来.

 "<hr><center>" NGINX_VER "</center>" CRLF #老版本这里需要修改为web,现在这里不需要修改,因为它调用了NGINX_VER变量

 "<hr><center>web</center>" CRLF

2.2、安装nginx依赖

[root@cong11 nginx-1.10.3]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel  pcre pcre-devel

 2.3、预编译

创建添加www组

[root@cong11 ~]# groupadd www

 创建nginx运行账户www并加入到www组,不允许www用户直接登录系统。

[root@cong11 ~]# useradd -g www www -s /sbin/nologin

 指明nginx的安装目录及需要用到的模块

[root@cong11 nginx-1.10.3]#  ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=www --group=www

  --with-http_dav_module   # nginx 编译时通过加入“--with-http_dav_module”可以启用对WebDav协议的支持。WebDAV Web-based Distributed Authoring and Versioning 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GETPOSTHEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。即ngx_http_dav_module模块用于通过 WebDAV 协议进行文件管理自动化。该模块处理 HTTP WebDAV PUTDELETEMKCOLCOPY MOVE 方法。

--with-http_stub_status_module  #获取Nginx的状态统计信息

--with-http_addition_module    #向响应内容中追加内容,比如想在站点底部追加一个js或者css,可以使用这个模块来实现,即模块ngx_http_addition_module在响应之前或者之后追加文本内容。

--with-http_sub_module   # ngx_http_sub_module模块是一个过滤器,它修改网站响应内容中的字符串,比如你想把响应内容中的‘iuwai’全部替换成‘aaaaa‘,这个模块已经内置在nginx中,但是默认未安装,需要安装需要加上配置参数:--with-http_sub_module

--with-http_flv_module      #该ngx_http_flv_module模块为Flash视频(FLV)文件提供伪流服务器端支持。它会根据指定的 start 参数来指定跳过多少字节,并在返回数据前面附上 FLV 头。

location ~ \.flv$ {

    flv;

}

curl localhost/index.flv?start=10

该请求的意思是,从视频文件 index.flv 10个字节开始读取返回,并在返回的数据上附上 FLV 头。

--with-http_mp4_module     #模块提供了对 MP4 视频的播放支持,相关的扩展名 .mp4 .m4v .m4a。

--with-http_ssl_module         #启用ngx_http_ssl_module

--with-pcre   # 支持正则表达式

注:如果pcre是通过编译安装的话,例如

# tar zxvf /usr/local/src/pcre-8.36.tar.gz -C /usr/local/src/

# cd  /usr/local/src/pcre-8.36

# ./configure && make && make install

则--with-pcre=/usr/local/src/pcre-8.36  #需要注意,这里指的是源码,用./configure --help |grep pcre查看帮助。 

2.4、预编译安装

[root@cong11 nginx-1.10.3]# make && make install

2.5、启动nginx

[root@cong11 ~]# /usr/local/nginx/sbin/nginx

 2.6、查看端口号

[root@cong11 ~]# /usr/local/nginx/sbin/nginx

可以看到nginx已经成功启动,接下来我们使用curl命令测试服务名和版本号有没有成功隐藏

2.7、测试

[root@cong11 ~]# curl  -I 192.168.121.60

可以看到服务名和版本号都改成了我们修改后的

 2.8、网站测试

在浏览器输入我们nginx服务器的ip地址测试是否可以成功访问

 

 2.9、配置文件nginx.conf

  •  全局配置

Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为”关键字  值;”(末尾以分号表示结束),以”#”开始的部分表示注释。

常用配置项:

user  nobody;//运行用户,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody

 worker_processes 2;//这个指令是指当一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。(通过”ulimit –n 数值”可以修改打开的最多文件数目)

 error_log  logs/error.log; //全局错误日志文件的位置

 pid  logs/nginx.pid;  //PID文件的位置

  • I/O事件配置

 使用”events {}”界定标记,用来指定Nginx进程的I/O响应模型,每个进程的连接数等设置

events {

            use epoll;//使用epoll模型,对于2.6以上的内核,建议使用epoll模型以提高性能

            worker_connections 4096;//每个进程允许的最多连接数(默认为1024),每个进程的连接数应根据实际需要来定,一般在10000以下,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。

}

    当涉及到Nginx和JVM的调优时,我们可以从两个方面来讨论。 首先是Nginx调优Nginx是一个高性能的Web服务器和反向代理服务器,以下是一些常见的Nginx调优方法: 1. 调整worker_processes和worker_connections:根据服务器的硬件配置和负载情况,适当调整worker_processes(工作进程数)和worker_connections(每个工作进程的最大连接数)参数,以提高并发处理能力。 2. 启用gzip压缩:开启gzip压缩可以减小传输的数据量,提高网站的响应速度。 3. 调整缓冲区大小:通过调整proxy_buffer_size、proxy_buffers和proxy_busy_buffers_size等参数,可以优化Nginx对后端服务器的请求和响应的缓冲区管理,提高性能。 4. 使用缓存:使用Nginx的缓存功能可以减轻后端服务器的负载,提高响应速度。可以通过配置proxy_cache和相关参数来启用缓存。 5. 负载均衡:通过配置upstream模块,可以实现Nginx的负载均衡功能,将请求分发到多个后端服务器上,提高系统的可用性和性能。 接下来是JVM的调优。JVM是Java虚拟机的缩写,以下是一些常见的JVM调优方法: 1. 调整堆内存大小:通过调整-Xms和-Xmx参数,可以设置JVM的初始堆大小和最大堆大小,以适应应用程序的内存需求。 2. 设置垃圾回收器:根据应用程序的特点和性能需求,选择合适的垃圾回收器,如Serial GC、Parallel GC、CMS GC或G1 GC,并通过相关参数进行配置。 3. 调整线程数:通过调整-Xss参数,可以设置线程栈的大小,以及通过调整-XX:ParallelGCThreads参数来设置并行垃圾回收线程数,以提高并发处理能力。 4. 监控和分析工具:使用JVM提供的监控和分析工具,如jstat、jconsole、jvisualvm等,可以实时监控JVM的运行状态和性能指标,帮助定位性能瓶颈和优化机会。 5. 代码优化:通过对代码进行优化,如减少对象的创建、避免过多的同步、合理使用缓存等,可以减少JVM的负载,提高性能。
    评论 3
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值