Centos7.4安装Nginx及优化一

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发.
Nginx以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。
由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置。


为什么要选择Nginx?

Nginx 是一个高性能的 Web 和反向代理服务器,它具有有很多非常优越的特性:

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写,不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。


如何选择Nginx版本?


nginx的英文官方网站是:http://www.nginx.org/在这里我们可以直接查看Nginx的各个版本号。Nginx的软件有三种版本:稳定版,开发板,和历史稳定版。开发板更新的较快,包含最近的功能和BUG修复,但同时也可能会遇到新的BUG,开发板的更新一旦稳定下来就会被纳入稳定版中。稳定版更新的较慢,但是软件的BUG会很少,可以作为企业的首选,因此通常建议使用稳定版。当然在实际工作中,选择稳定版时,尽量避免使用最新的版本,选择比已出来的最近版晚6-10个月的版本比较好。在本章我们选择1.12.2稳定版本


Nginx的安装非常简单,具体的操作如下:


1)检查并安装Nginx基础依赖包pcre-devel openssl-devel


名称中带有"devel"字符串的软件包是必须要安装的

2)安装pcre-devel以及openssl-devel

[root@yankerp ~]# yum install -y openssl-devel pcre-devel

3)开始安装Nginx操作命令如下:

[root@yankerp ~]# mkdir -p /home/yankerp/tools
-p选项表示不提示目录是否存在,循环的向下创建所有的层级目录,如果存在就忽略。

[root@yankerp ~]# cd /home/yankerp/tools/
进入/home/yankerp/tools目录

[root@yankerp tools]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
下载软件包,进入http://nginx.org/download/复制对应版本的下载链接地址。

[root@yankerp tools]# ls -l nginx-1.12.2.tar.gz 
-rw-r--r--. 1 root root 981687 10月 17 21:20 nginx-1.12.2.tar.gz
[root@yankerp tools]# useradd -M -s /sbin/nologin nginx
[root@yankerp tools]# tar zxf nginx-1.12.2.tar.gz 
[root@yankerp tools]# cd nginx-1.12.2/


在我们编译安装前我们可以隐藏Nginx软件名称以及版本号如下:

[root@yankerp nginx-1.12.2]# pwd
/home/yankerp/tools/nginx-1.12.2
[root@yankerp nginx-1.12.2]# vim src/core/nginx.h 




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

[root@yankerp nginx-1.12.2]# vim src/http/ngx_http_header_filter_module.c 




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

[root@yankerp nginx-1.12.2]# vim src/http/ngx_http_special_response.c 



以上修改完成后正式安装如下:


./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=nginx --group=nginx
make && make install



--with-http_dav_module #增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法
--with-http_stub_status_module #获取Nginx的状态统计信息
--with-http_addition_module #作为一个输出过滤器,支持不完全缓冲,分部分相应请求
--with-http_sub_module #允许一些其他文本替换Nginx相应中的一些文本
--with-http_flv_module #提供支持flv视频文件支持
--with-http_mp4_module #提供支持mp4视频文件支持,提供伪流媒体服务端支持
--with-http_ssl_module #启用ngx_http_ssl_module

安装完成后的优化:

[root@yankerp nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

启动Nginx

nginx
[root@yankerp nginx-1.12.2]# netstat -anput | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      42330/nginx: master 


此时Nginx服务正式安装完成,我们开放80端口,在windows打开浏览器输入http://192.168.xx.xx也就是nginx服务器的IP地址如果看到以下图片,就表示Nginx已经启动了。

开放80端口


windows访问测试:



测试是否隐藏了版本和软件名


以上图中证明我们修改成功,再次测试返回错误的信息,如下:


Nginx的配置优化



[root@yankerp nginx-1.12.2]# ps -ef | grep nginx
root 42347 1 0 14:26 ? 00:00:00 nginx: master process nginx
nginx 42348 42347 0 14:26 ? 00:00:00 nginx: worker process

在这里我们还可以看到在查看的时候,work进程是nginx程序用户,但是master进程还是root,其中,master是监控进程,也叫主进程,work是工作进程,部分还有cache相关进程,关系如图:


可以直接理解为master是管理员,work进程才是为用户提供服务的!


nginx运行工作进程个数,一般我们设置为cpu核心或者核心数x2

如果不了解cpu的核数,我们可以使用top命令来查看,之后在按1就可以看出来,同时也可以查看/etc/cpuinfo/文件,这里我就用top命令了如下:


这里我有四核那么我们修改nginx主配置 nginx.conf文件

Nginx运行CPU亲和力,比如四核:


worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000

八核如下:

worker_processes 8;

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000000


worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。


[root@yankerp nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf


修改完成后重新加载nginx配置文件查看,如下:



设置Nginx最多打开的文件数

worker_rlimit_nofile 65535;

这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是 那么均匀,所以最好与ulimit -n的值保持一致。

文件资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。
* soft nofile 65535
* hard nofile 65535

用户重新登录生效(ulimit -n)


[root@yankerp conf]# vim /etc/security/limits.conf




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



(2) Nginx事件处理模型
events {
use epoll;
worker_connections 65535;
multi_accept on;

}
nginx采用epoll事件模型,处理效率高
work_connections是单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections
实际我们填入一个65535,足够了,这些都算并发值,一个网站的并发达到这么大的数量,也算一个大站了!
multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接



2017年倒计时!!!

希望对您有所帮助,再见~







相关文章

linux下开机自启: 在/etc/init.d目录下新建文件elasticsear...
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以...
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用...
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一...
设置时区(CentOS 7) 先执行命令timedatectl status|grep &...
vim /etc/sysconfig/network-scripts/ifcfg-eth0 B...