Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
nginx服务器如何处理请求?
1 多进程机制
2 每个工作进程采用异步非阻塞方式
3 采用epoll事件驱动模型
(1)特点
一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。也是由于其的特性,其应用非常广
(2)主要功能
反向代理:
是用来代理服务器的,代理我们要访问的目标服务器。代理服务器接受请求,然后将请求转发给内部网络的服务器(集群化),并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器
负载均衡:
多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。可使用的负载均衡策略有:轮询(默认)、权重、ip_hash、url_hash(第三方)、fair(第三方)
动静分离:
指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高;根据配置对不同的请求做不同转发,这是动态分离的基础。静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。动态请求由相应的后端服务器处理。
1.1官网下载nginx压缩包
可以从官网进行下载:www.nginx.org —>download
本博文使用该版本进行: nginx-1.17.1.tar.gz
1.2解压
tar zxf nginx-1.17.1.tar.gz
1.3修改配置文件。关闭debug模式进行编译安装
关闭该模式之后,编译安装的nginx目录会比较小,便于移动使用
vim auto/cc/gcc
171 # debug
172 #CFLAGS="$CFLAGS -g" # 将该行进行注释,关闭debug模式
1.4编译安装nginx
./configure --prefix=/usr/local/nginx --with-file-aio
–prefix=/usr/local/nginx #安装路径
在nginx目录下生成了两个文件 Makefile
makefile 是告诉怎么编译 怎么运行
objs中间文件 ngx_modulrs.c 编译生成了哪些模块
1.5 make & make install 编译安装
第一次安装的时候才执行make install , 热部署 替换版本的时候,只执行make(生成objs 二进制目录)
1.6启动nginx 查看进程及版本 编译模块
发现有两个nginx的进程一个是master进程,一个是worker进程,master是主进程,用来派生worker进程,worker进程是实际工作的进程。
ps -ef | grep nginx
/usr/local/nginx/sbin/nginx -v ##查看版本
/usr/local/nginx/sbin/nginx -V ##查看版本与编译模块
1.7 添加nginx配置文件的语法提示
cd /usr/local/nginx/
mkdir ~/.vim
cp -r contrib/vim/* ~/.vim
添加前:
添加后:
1.8更改启动方式(两种方式选一种即可 推荐软链接方式)
利用绝对路径的方式启动nginx很不方便,接下来设置更方便的启动方式
1.8.1 软链接
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -t # 检查nginx 检测语法 、配置是否正确
nginx -s reload # 重新加载参数配置
nginx -s stop # 关闭服务
nginx # 开启服务
1.8.2systemd启动方式设置
cp /usr/lib/systemd/system/httpd.service /etc/systemd/system/nginx.service
vim /etc/systemd/system/nginx.service
修改配置文件如下:
[Unit]
Description=The Nginx HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl start nginx #开启服务
systemctl reload nginx# 重新加载参数配置
systemctl stop nginx# 关闭服务
systemctl status nginx# 查看服务状态
使用nginx1.16.1 替换1.17.1版本
2.1 下载1.16.0版本nginx
2.2 解压
tar zxf nginx-1.16.0.tar.gz
2.3进入1.16.0目录中编译
cd nginx-1.16.0
./configure --prefix=/usr/local/nginx --with-file-aio
2.4 重新编译make
(不能make install 否则会全部清除全部Nginx配置)
查看重新编译的信息
cd /nginx-16.0/objs ls 可以看到有一个nginx文件(./nginx -V 查看具体编译信息)
2.5 将16版本的nginx复制到/usr/local/nginx/sbin/nginx目录中
cp -f nginx /usr/local/nginx/sbin/nginx
查看原来版本的进程ps -ef | grep nginx
kill -USR2 2109
ps -ef | grep nginx
kill -WINCH 2109
查看版本号:nginx -V
热部署成功
3.1恢复二进制文件
(1)cd /usr/local/nginx/sbin
cp nginx17 nginx -f
3.2恢复1.17版本进程
kill -HUP 2109
3.3断开16版本的worker连接
kill -WINCH (旧版本 进程 id)
3.4查看版本 回退成功
4.1版本隐藏
在企业中,为了安全性通常要把nginx版本隐藏
cd ~/nginx-1.17.1/
vim src/core/nginx.h
去掉14行 后面的 NGINX_VERSION
本博文为了方便实验,暂不做版本隐藏
4.2用户修改
为了安全性 一般使用nginx用户来控制nginx服务的worker进程
添加用户:useradd -s /sbin/nologin nginx
修改配置文件:vim /usr/local/nginx/conf/nginx.conf
修改worker的用户及用户组为nginx
worker启动进程数为2
重新加载
4.3 发布页面修改
nginx默认发布页面
修改发布页面