Web服务(05)——Nginx的简介和安装

Web服务(05)——Nginx的简介和安装

前言

目前在市面上使用LAMP的架构已经很少了,基本上现在都是使用LNMP的架构,其中“N”就是Nginx服务。

一、Nginx简介

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行,单台物理服务器可支持30 000~50 000个并发请求。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,目前中国大陆使用nginx网站的用户有:百度、京东、新浪、腾讯等。

Tengine:

Tengine 是由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine 的性能和稳定性已经在大型的网站如淘宝网、天猫商城等得到了很好的检验。可以这样理解:淘宝网拿到了 Nginx 源代码之后,进行了功能的填充、优化等等,然后提交给Nginx 官方,但是由于 Nginx 官方相应慢甚至不响应,加上语言沟通的不顺畅,于是淘宝公司就自己打包,在遵循 GPL 的原则上进行二次开发,于是就出了现在的 Tengine 这个版本。

Nginx 是由 Igor Sysoev 为俄罗斯访问点开量第二的 Rambler.ru 站发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011 年 6 月 1 日,Nginx 1.0.4 发布。

Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载均衡。其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞所以必须使用FastCGI方式来执行PHP程序。

二、Nginx的特点

• 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。

• 无缓存的反向代理加速,简单的负载均衡和容错。

• FastCGI,简单的负载均衡和容错。

扫描二维码关注公众号,回复: 14483411 查看本文章

• Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

• Nginx具有很高的稳定性,其他HTTP服务器当遇到访问的峰值,或者有人恶意发起慢速连接时,也很有可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上的进程,web响应速度就明显非常缓慢了,而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10000个没有活动的链接就只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的,就稳定性而言,nginx比Lighttpd更胜一筹。

• Nginx支持热部署,它的启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动,你还能够在不间断服务的情况下,对软件版本进行升级。

Nginx和Apache的区别对比

• Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;

• Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求;

• Nginx避免子进程的概念,Apache是基于子进程的;

• Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般(大约为Apache的1/5到1/10);

• Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;

• Nginx支持热部署,Apache不支持热部署;

• Nginx对于静态文件处理具有更高效率,Apache相对一般;

• Nginx在反向代理场景具有明显优势,Apache相对一般。

• Nginx功能比Apache少(但常用功能均有)

• Nginx对php可使用cgi方式和fastcgi方式,但是没有模块编译加载方式。

• Nginx可以在7层(转发并处理)和4层(只转发)进行代理,Apache只能在7层进行代理。

总结:

Nginx轻量级,占用资源少,负载均衡,高并发处理器,静态内容处理高效;Apache拥有丰富的模块组件支持,稳定性强,BUG少,动态内容处理强。

三、编译安装Nginx服务

1.关闭防火墙,将安装nginx所需软件包传到/opt目录下

[root@TTTTT ~]# systemctl stop firewalld
[root@TTTTT ~]# systemctl disable firewalld
[root@TTTTT ~]# setenforce 0

2.安装依赖包

nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

[root@TTTTT ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make

3.创建运行用户、组

Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限

[root@TTTTT ~]# useradd -M -s /sbin/nologin nginx

4.编译安装Nginx

#切换到nginx压缩包存放目录
[root@TTTTT ~]# tar zxvf nginx-1.12.0.tar.gz -C /opt/
#切换到nginx解压目录进行配置
[root@TTTTT ~]# ./configure \
--prefix=/usr/local/nginx \		#指定nginx的安装路径
--user=nginx \					#指定用户名
--group=nginx \					#指定组名
--with-http_stub_status_module	#启用http_stub_status_module 模块以支持状态统计操作
#编译安装
[root@TTTTT ~]# make && make install
#查看是否成功在/usr/local目录下安装nginx
[root@TTTTT nginx-1.12.2]# ls /usr/local   
bin    etc    httpd    lib    libexec  nginx  sbin   src
boost  games  include  lib64  mysql    php7   share
#优化——创建软链接将nginx命令当如系统环境操作命令进行识别
[root@TTTTT nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/
#输入ng用TAB补全看是否被识别成功
[root@TTTTT nginx-1.12.2]# ng
ngettext  nginx     
##检查配置文件是否配置正确
[root@TTTTT nginx-1.12.2]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#启动nginx服务,不需要systemctl启动
[root@TTTTT nginx-1.12.2]# nginx

此时出现报错nginx: [emerg] still could not bind()

报错显示绑定80端口的时候出错,此时去查看80端口时发现80端口目前被httpd服务占用中:

这样直接把httpd服务给停了就可以启动nginx服务了。

此时我们登录浏览器输入虚拟机的IP地址可查看nginx服务是否工作:

如何停止nginx服务呢?因为我们启动nginx服务的时候不需要使用systemctl程序管理命令,所以也无法使用systemctl命令来关闭nginx服务。

因为nginx所有请求都由一个线程处理,所以这个时候我们需要使用kill命令来杀死这条线程就可以关闭nginx服务了。

#先查看nginx的PID号
[root@TTTTT nginx-1.12.2]# cat /usr/local/nginx/logs/nginx.pid
6124
#使用kill杀死该进程
[root@TTTTT nginx-1.12.2]# kill -3 6124
#检查nginx服务是否被关闭
[root@TTTTT nginx-1.12.2]# netstat -natp |grep nginx

5.添加nginx系统服务

刚刚将nginx添加到系统环境变量中,使"nginx"这条命令能被系统识别,nginx则变成了一条命令,而命令格式为nginx [-选项] [参数],nginx常用的选项有:

选项 含义
-v 显示版本,然后退出
-V 显示版本和配置选项,然后退出
-t 测试配置并退出
-T 测试配置,转储并退出
-q 在配置测试期间抑制非错误消息
-s signal 向主进程发送信号 :停止(stop),退出(quit),重新打开(reopen),重新加载(reload)
-p prefix 设置前缀路径(默认为/usr/local/nginx/)
-e filename 设置错误日志文件(默认:logs/error.log)
-c filename 设置配置文件(默认为conf/nginx.conf)
-g directives 在配置文件外设置全局指令

而当我们想通过systemctl命令来对nginx进行管理的时候,则需要在/lib/systemd/system目录下添加系统配置文件:

[root@TTTTT nginx-1.12.2]# vim /lib/systemd/system/nginx.service
[Unit]									#服务的说明
Description=nginx						#描述服务
After=network.target					#依赖,当依赖的服务启动之后再启动自定义的服务
[Service]								#服务运行参数的设置
Type=forking							#后台运行的形式,使用此启动类型应同时指定
PIDFile=/usr/local/nginx/logs/nginx.pid	#PIDFile以便systemd能够跟踪服务的主进程。
ExecStart=/usr/local/nginx/sbin/nginx	#为服务的具体运行命令
ExecReload=/bin/kill -s HUP $MAINPID	#为重启命令
ExecStop=/bin/kill -s QUIT $MAINPID		#为停止命令
PrivateTmp=true							#表示给服务分配独立的临时空间
[Install]								#服务安装的相关设置,可设置为多用户
WantedBy=multi-user.target
#给这个文件赋权之后就可以使用systemctl来管理nginx服务了
[root@TTTTT nginx-1.12.2]# chmod 754 /lib/systemd/system/nginx.service


[Install] #服务安装的相关设置,可设置为多用户
WantedBy=multi-user.target
#给这个文件赋权之后就可以使用systemctl来管理nginx服务了
[root@TTTTT nginx-1.12.2]# chmod 754 /lib/systemd/system/nginx.service


END

猜你喜欢

转载自blog.csdn.net/tu464932199/article/details/125916356
今日推荐