准备源代码包
#从项目的官方网站或代码仓库(如 GitHub)下载源代码
wget https://nginx.org/download/nginx-1.24.0.tar.gz #下载
tar -xzvf nginx-1.24.0.tar.gz #解压
cd nginx-1.24.0
安装编译工具和依赖项
#正则表达式库(pcre-devel)、 数据压缩库(zlib-devel)和 https模块库(openssl-devel)
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
zlib与zlib-devel关系:zlib-devel提供编译环境,zlib提供运行时环境。其他同理,*-devel 库只支持编译,并不支持运行。
安装(3步曲)
#配置构建环境
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module
#编译
make
#安装
sudo make install
./configure --help
查看./configure 支持哪些参数
不安装
该模块。如果需要安装,则添加到 ./configure 参数中;会安装
该模块。如果不需要安装,则添加到 ./configure 参数中。验证
#启动验证
sudo /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -version
卸载
sudo rm -rf /usr/local/nginx
#编译安装只需清理编译目录即可,即删除 --prefix 参数目录。
更多配置内容查看这篇:《Nginx 配置与实战》
检查已安装模块,命令:/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module
安装模块
由于已经安装了 --with-http_ssl_module 模块,所以以安装 --with-http_stub_status_module 为例:
#1. 进入安装包 nginx-1.24.0 目录
cd nginx-1.24.0
#2. 重新配置构建环境
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_stub_status_module
#3. 编译(make成功后,不用make install,否则nginx会重新安装,会将原来的配置覆盖)
make
如果不知道需要哪些模块,可以按照官方yum安装的模块,基本能满足95%以上的生产需求。yum安装模块如下,可自行参考:
./configure --prefix=/usr/local/nginx --user=$USER --group=$(id -gn) --with-compat --with-debug --with-file-aio --with-Google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
验证并更新
make执行后,nginx-1.24.0/objs 目录下会重新生成一个 nginx 文件,这个就是新版本的程序了。
为了清晰体现“新nginx”文件位置,以下操作均在 nginx-1.24.0 上级目录操作
查看新nginx的编译模块: nginx-1.24.0/objs/nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
检查模块无误后更新
#1. 停止 nginx 服务
sudo /usr/local/nginx/sbin/nginx -s stop
#2. 覆盖旧 nginx 启动文件
mv nginx-1.24.0/objs/nginx /usr/local/nginx/sbin/nginx
#3. 启动测试
sudo /usr/local/nginx/sbin/nginx
软链接(可选)
#正则表达式库(pcre-devel)、 数据压缩库(zlib-devel)和 https模块库(openssl-devel)
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
0
服务操作
#正则表达式库(pcre-devel)、 数据压缩库(zlib-devel)和 https模块库(openssl-devel)
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
1
新建 nginx 服务脚本文件(官方)
#正则表达式库(pcre-devel)、 数据压缩库(zlib-devel)和 https模块库(openssl-devel)
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
2
此脚本是nginx官方提供的,地址:http://wiki.nginx.org/RedHatNginxInitScript
注意:如果是自定义安装的nginx, 修改根据实际情况修改命令程序路径
和配置文件路径
。
服务脚本命令
#正则表达式库(pcre-devel)、 数据压缩库(zlib-devel)和 https模块库(openssl-devel)
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
3
系统管理(chkconfig)
上面的方法完成了用脚本管理nginx服务的功能,但是还是不太方便,比如要设置nginx开机启动等。
这个时候我们可以使用chkconfig来进行管理。
#正则表达式库(pcre-devel)、 数据压缩库(zlib-devel)和 https模块库(openssl-devel)
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
4
新建 nginx 服务文件
#正则表达式库(pcre-devel)、 数据压缩库(zlib-devel)和 https模块库(openssl-devel)
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
5
[Unit]
: 服务的说明
Description
: 描述服务After
: 描述服务类别[Service]
: 服务运行参数的设置
Type=forking
: 后台运行ExecStart
: 服务启动命令(绝对路径)ExecReload
: 服务重启命令(绝对路径)ExecStop
: 服务停止命令(绝对路径)PrivateTmp=True
: 表示给服务分配独立的临时空间[Install]
: 运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3系统管理(systemctl)
#正则表达式库(pcre-devel)、 数据压缩库(zlib-devel)和 https模块库(openssl-devel)
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
6
Nginx负载均衡器的特点是:
Nginx 的最重要的几个使用场景:
对于前端来说 Node.js 并不陌生, Nginx 和 Node.js 的很多理念类似, HTTP 服务器、事件驱动、异步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以实现,但 Nginx 和 Node.js 并不冲突,都有自己擅长的领域。 Nginx 擅长于底层服务器端资源的处理(静态资源处理转发、反向代理,负载均衡等), Node.js 更擅长上层具体业务逻辑的处理,两者可以完美组合。
用一张图表示:
代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,然后将服务端的响应转发给客户端。
不管是正向代理还是反向代理,实现的都是上面的功能。
正向代理:为了从原始服务器(origin server)取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
反向代理(Reverse Proxy)方式是指以代理服务器来接受互联网上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给客户端;此时代理服务器对外就表现为一个反向代理服务器。
反向代理的优势:
动静分离是指在 web 服务器架构中,为提升整个服务的访问性和可维护性,将
静态页面(静态内容接口)
与动态页面(动态内容接口)
分开不同系统访问的架构设计方法。
一般来说,都需要将动态资源和静态资源分开,由于 Nginx 的高并发和静态资源缓存等特性,经常将静态资源部署在 Nginx 上。
使用前后端分离后,可以很大程度提升静态资源的访问速度,即使动态服务不可用,静态资源的访问也不会受到影响。
Nginx 实现负载均衡,一般来说指的是将请求转发给服务器集群,核心是「分摊压力」
单个服务器解决不了的问题,可以使用多个服务器,然后将请求分发到各个服务器上,将负载分发到不同的服务器,这就是负载均衡。
一般情况下,客户端发送多个请求到服务器,服务器处理请求,其中一部分可能要操作一些资源比如数据库、静态资源等,服务器处理完毕后,再将结果返回给客户端。
这种模式对于早期的系统来说,功能要求不复杂,且并发请求相对较少的情况下还能胜任,成本也低。
随着信息数量不断增长,访问量和数据量飞速增长,以及系统业务复杂度持续增加,这种做法已无法满足要求,并发量特别大时,服务器容易崩。
很明显这是由于服务器性能的瓶颈造成的问题,除了堆机器之外,最重要的做法就是负载均衡。
请求爆发式增长的情况下,单个机器性能再强劲也无法满足要求了,这个时候集群的概念产生了,
Nginx 实现负载均衡的策略:
一般是Nginx + Keepalived来实现Nginx的高可用。
有兴趣的可以看看这篇:《Keepalived 的高可用配置与使用》
Via