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


文章目录

  • Web服务(05)——Nginx的简介和安装
    • 前言
    • 一、Nginx简介
    • 二、Nginx的特点
      • Nginx和Apache的区别对比
    • 三、编译安装Nginx服务
      • 1.关闭防火墙,将安装nginx所需软件包传到/opt目录下
      • 2.安装依赖包
      • 3.创建运行用户、组
      • 4.编译安装Nginx
      • 5.添加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,简单的负载均衡和容错。
? 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 binetchttpdliblibexecnginxsbinsrc boostgamesincludelib64mysqlphp7share #优化——创建软链接将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 ngettextnginx ##检查配置文件是否配置正确 [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()
linux|Web服务(05)——Nginx的简介和安装
文章图片

报错显示绑定80端口的时候出错,此时去查看80端口时发现80端口目前被httpd服务占用中:
linux|Web服务(05)——Nginx的简介和安装
文章图片

这样直接把httpd服务给停了就可以启动nginx服务了。
linux|Web服务(05)——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

【linux|Web服务(05)——Nginx的简介和安装】
[Install] #服务安装的相关设置,可设置为多用户
WantedBy=multi-user.target
#给这个文件赋权之后就可以使用systemctl来管理nginx服务了
[root@TTTTT nginx-1.12.2]# chmod 754 /lib/systemd/system/nginx.service
END

    推荐阅读