阿里云 Centos 7.4 下Nginx的安装及配置优化(Tar包下载安装)(一)


引言

近期需要重新部署一套小程序的后端,公司重新申请了一台阿里云ECS,因此顺带写个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?

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

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

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

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

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


如何选择Nginx版本?

Nginx的英文官方网站是:http://www.nginx.org/

在网址里我们可以直接查看Nginx的各个版本号。

Nginx的软件有三种版本:稳定版,开发板,和历史稳定版。

开发板更新的较快,包含最近的功能和BUG修复,但同时也可能会遇到新的BUG,开发板的更新一旦稳定下来就会被纳入稳定版中。

稳定版更新的较慢,但是软件的BUG会很少,可以作为企业的首选,因此通常建议使用稳定版。当然在实际工作中,选择稳定版时,尽量避免使用最新的版本,选择比已出来的最近版早6-10个月的版本比较好。在本章我们选择1.12.2稳定版本


Nginx的安装

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

nginx:[root@OzanZone /]# rpm -qa openssl-devel openssl
openssl-1.0.2k-8.el7.x86_64
[root@OzanZone /]# rpm -qa pcre-devel pcre
pcre-8.32-17.el7.x86_64

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

2)如果查询不到上面的两个devel包,则安装pcre-devel以及openssl-devel

[root@OzanZone /]# yum install -y openssl-devel pcre-devel

安装后查看下

[root@OzanZone /]# rpm -qa openssl-devel openssl
openssl-devel-1.0.2k-12.el7.x86_64
openssl-1.0.2k-12.el7.x86_64
[root@OzanZone /]# rpm -qa pcre-devel pcre
pcre-devel-8.32-17.el7.x86_64
pcre-8.32-17.el7.x86_64

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

[root@OzanZone /]# mkdir -p /home/ozan/tools/

-p选项表示不提示目录是否存在,循环的向下创建所有的层级目录,如果存在就忽略。

[root@OzanZone /]# cd /home/ozan/tools/

进入/home/ozan/tools/目录

[root@OzanZone tools]# wget http://nginx.org/download/nginx-1.12.2.tar.gz

下载软件包,进入http://nginx.org/download/复制对应版本的下载链接地址。

[root@OzanZone tools]# ls -l nginx-1.12.2.tar.gz 
-rw-r--r-- 1 root root 981687 Oct 17  2017 nginx-1.12.2.tar.gz
[root@OzanZone tools]# useradd -M -s /sbin/nologin nginx
[root@OzanZone tools]# tar zxf nginx-1.12.2.tar.gz 
[root@OzanZone tools]# cd nginx-1.12.2
./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
#增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法
--with-http_dav_module          
#获取Nginx的状态统计信息
--with-http_stub_status_module 
#作为一个输出过滤器,支持不完全缓冲,分部分相应请求
--with-http_addition_module  
#允许一些其他文本替换Nginx相应中的一些文本
--with-http_sub_module     
#提供支持flv视频文件支持
--with-http_flv_module     
#提供支持mp4视频文件支持,提供伪流媒体服务端支持
--with-http_mp4_module  
#启用ngx_http_ssl_module
--with-http_ssl_module         

安装完成后的优化:

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

启动Nginx

[root@OzanZone sbin]# nginx
[root@OzanZone sbin]# netstat -anput|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      21041/nginx: master 

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

windows访问测试:


Nginx的配置优化

[root@OzanZone sbin]# ps -ef | grep nginx
root     21041     1  0 14:22 ?        00:00:00 nginx: master process nginx
nginx    21042 21041  0 14:22 ?        00:00:00 nginx: worker process
root     21052 18032  0 14:27 pts/0    00:00:00 grep --color=auto nginx

在这里我们还可以看到在查看的时候,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@OzanZone conf]# vi nginx.conf
#user  nobody;
worker_processes  2;
worker_cpu_affinity 01 10;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

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

[root@OzanZone conf]# vi nginx.conf
[root@OzanZone conf]# nginx -s reload
[root@OzanZone conf]# ps -ef|grep nginx
root     21085     1  0 14:46 ?        00:00:00 nginx: master process nginx
nginx    21105 21085  0 14:50 ?        00:00:00 nginx: worker process
nginx    21106 21085  0 14:50 ?        00:00:00 nginx: worker process
root     21112 18032  0 14:50 pts/0    00:00:00 grep --color=auto 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@OzanZone security]# vim /etc/security/limits.conf 
# End of file
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
[root@OzanZone local]# su -l
Last login: Mon Jul  9 15:10:39 CST 2018 from 58.222.192.194 on pts/1
[root@OzanZone ~]# ulimit -n 
65535

然后修改nginx.conf文件vim /usr/local/nginx/conf/nginx.conf

#user  nobody;
worker_processes  2;
worker_cpu_affinity 01 10;
worker_rlimit_nofile 65535;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

Nginx事件处理模型

#user  nobody;
worker_processes  2;
worker_cpu_affinity 01 10;
worker_rlimit_nofile 65535;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections 65535;
    multi_accept on;
}
  • nginx采用epoll事件模型,处理效率高
  • work_connections是单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections(实际我们填入一个65535,足够了,这些都算并发值,一个网站的并发达到这么大的数量,也算一个大站了)!
  • multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接,默认是on,设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。

示例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容