文章目录
- 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()
文章图片
报错显示绑定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
【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
推荐阅读
- linux|IP地址荷官——DHCP(动态主机配置协议)简介
- nginx|Web服务(08)——Nginx的Rewrite
- linux|ROS中catkin_make的OpenCV冲突的解决(踩坑小记,报错分析)
- 树莓派|树莓派的常用系统配置
- 树莓派|树莓派镜像制作
- 学习|k8s的安装-单master、多node
- linux|Docker高级篇之可视化工具Portainer和CAdvisor+InfluxDB+Granfana
- JDBC|JDBC进阶—— 师承尚硅谷(DAO)
- linux|docker 容器数据卷