- Nginx简介
1.什么是nginx?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行
其特点是占有内存少,并发能力强
2.nginx的优点?
Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性
(1)适用于高并发
在连接高并发的情况下,Nginx是Apache服务不错的替代品
能够支持高达 50,000 个并发连接数的响应
(2)可以做负载均衡服务器和HTTP服务器
Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务
也可以支持作为 HTTP代理服务对外进行服务
无缓存的反向代理加速,简单的负载均衡和容错
(3)代码的特点
Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统
(4)可以作为代理服务器
Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务
Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动
3.Nginx能做什么?
(1)反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器
并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器
而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已
(2)负载均衡
负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等
从而共同完成工作任务,简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理
负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡
而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略
(3)HTTP服务器(动静分离)
Nginx本身也是一个静态资源的服务器
当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来
动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
(4)正向代理
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器
为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器)
然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端才能使用正向代理
- Nginx最基本的部署
下载nginx安装包
tar zxf nginx-1.17.1.tar.gz
cd nginx-1.17.0/contrib
mkdir ~/.vim 建立一个家目录下的隐藏目录
cp -r vim/* ~/.vim 通过字体颜色,自动检测配置文件语法
vim src/core/nginx.h nginx的版本号(正常情况下需要删掉显示版本号代码,避免遭到恶意攻击)
#define NGINX_VER "nginx/" NGINX_VERSION
vim auto/cc/gcc 关闭gcc的debug调试模式,编译和安装nginx服务会产生大量的日志,关闭会节省空间
#CFLAGS="$CFLAGS -g"
./configure --prefix=/usr/local/nginx --with-file-aio 源码编译 ,--prefix=为安装路径,--with第三方模块。
编译过程出现error,逐步安装所需要的依赖性和devel开发包
报错:
checking for C compiler ... not found
解决:yum install -y gcc
报错:
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.
解决:yum install -y zlib-devel
yum install -y pcre-devel
编译完成后,生成了两个文件
makefile 是告诉怎么编译 怎么运行
objs 中间文件 ngx_modulrs.c 编译生成了哪些模块
make clean 清除编译的目录(上面两个文件会被删除)
make && make install 安装,make install只能执行一次。如果要更新,只需要make,把新生成的文件拷贝过去即可
/usr/local/nginx/sbin/nginx -V 查看版本号(V,看到编译的具体信息)
/usr/local/nginx/sbin/nginx -v
du -sh /usr/local/nginx/ 查看文件大小
cd /usr/local/nginx
ls
conf 为配置文件
html 发布目录
logs 日志目录(access error pid 进程的pid)
sbin 主程序
cd /usr/local/nginx/sbin
./nginx 启动服务
netstat -tnlp
useradd nginx 添加nginx用户
id nginx
浏览器:172.25.29.1 默认发布页面
关机,增加cpu个数为2,重启
lscpu 查看cpu个数
vim /usr/local/nginx/conf/nginx.conf 编辑nginx服务的配置文件
user ngnix ngnix; 使用nginx用户
worker_processes 2; 二核CPU,开启2个worker进程(配置nginx开启的进程数,一般来说,此配置依据cpu个数来设定. )
./sbin/nginx
./sbin/nginx -s stop
./sbin/nginx 执行脚本,重新开启服务
../sbin/nginx -t 检测配置文件语法(通过-t检查Nginx服务器配置文件是否有语法错误,可以与-c联用,使输出内容更详细)
ps aux |grep nginx 可以看到开启了两个子进程和一个主进程,master进程和worker进程。
master进程只有一个,worker进程可以有多个
worker 进程全部都是 master 进程的子进程
worker 进程是真正 working 的进程,才是真正处理请求的进程
worker 进程是以普通用户的身份进行运行的,可以极大增加程序的安全性。