一、Nginx介绍
Nginx是一个轻量级/高性能的反向代理Web服务器,由俄罗斯开发人员Igor Sysoev开发,是一个免费的开放源代码HTTP服务器,也可以用作反向代理,邮件代理和常规TCP / UDP代理服务器。它致力于以最少的资源有效地为大量并发用户提供服务。在无法处理大量Web流量时候,Nginx就起到了作用。
官方文档:http://nginx.org/en/docs/
二、Nginx的核心特点
1、跨平台:Nginx可以在大多数0s编译运行,而且也有Windows的版本
2、配置异常简单:非常容易上手。
3、非阻塞、高并发连接
4、事件驱动:通信机制采用epoll模型,支持更大的并发连接。通过异步非阻塞的事件处理机制,这种机制让你可以同时监控多个事件,Nginx实现由进程循环处理多个准备好的事件,从而实现高并发和轻量级。
5、MasterMorker结构:一个master进程生成一个或多个worker进程。
6、内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)
7、内置的健康检查功能:如果Nginx代理的后端的某台Web服务器宕机了,不会影响前端访问。
8、节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头。
9、稳定性高:用于反向代理,宕机的概率微乎其微。
三、编译安装
软件包下载地址:http://nginx.org/en/download.html
1、下载源码
# wget http://nginx.org/download/nginx-1.21.3.tar.gz
# tar zxf nginx-1.21.3.tar.gz
# cd nginx-1.21.3
# mkdir ~/.vim/
# cp -r contrib/vim/* ~/.vim/
2、安装依赖包
# yum -y install epel-release
# yum -y install gcc pcre-devel zlib-devel openssl-devel libxml2-devel libxslt-devel gd-devel GeoIP-devel jemalloc-devel libatomic_ops-devel perl-devel perl-ExtUtils-Embed libunwind-devel gperftools pcre openssl libxml2 GeoIP GeoIP-data nscd lsof
DNS缓存
编辑/etc/resolv.conf配置DNS服务器,打开NSCD服务,缓存DNS,提高域名解析响应速度。
systemctl start nscd.service # 启动NSCD服务
systemctl enable nscd.service
修改文件打开数限制
操作系统默认单进程最大打开文件数为1024,要想实现高并发,可以把单进程的文件打开数调整为65536。
echo "* soft nofile 65536
\* hard nofile 65536" >>/etc/security/limits.conf
*号表示所用用户
3、创建运行用户、组
# useradd -s /sbin/nologin nginx
4、编译安装
# cd /usr/local/src/nginx-1.20.2/
# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --http-client-body-temp-path=/usr/local/nginx/tmp/client_body --http-proxy-temp-path=/usr/local/nginx/tmp/proxy --http-fastcgi-temp-path=/usr/local/nginx/tmp/fastcgi --http-uwsgi-temp-path=/usr/local/nginx/tmp/uwsgi --http-scgi-temp-path=/usr/local/nginx/tmp/scgi --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-stream=dynamic --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module=dynamic --with-stream_ssl_preread_module --with-compat --with-pcre-jit --with-http_perl_module=dynamic --with-pcre --with-debug && make -j4 && make install -j4
模块 | 说明 |
---|---|
--user=nginx | 指明以那个身份运行worker进程,主控master进程一般由root运行 |
--group=nginx | 使用nginx用户组 |
--http-client-body-temp-path | 客户端body部分的临时文件存放路径 |
--http-proxy-temp-path | 作为代理服务器,服务器响应报文的临时文件存放路径 |
--http-fastcgi-temp-path | 作为fastcgi代理服务器,服务器响应报文的临时文件存放路径 |
--http-uwsgi-temp-path | 作为uwsgi代理服务器,服务器响应报文的临时文件存放路径 |
--http-scgi-temp-path | 作为scgi反代服务器,服务器响应报文的临时文件存放路径 |
--with-threads | 启用线程池功能 |
--with-file-aio | 启用AIO支持 |
--with-http_ssl_module | 编译SSL模块 |
--with-http_v2_module | 编译HTTP/2模块 |
--with-http_realip_module | 编译HTTP的真实IP模块 |
--with-http_addition_module | 编译响应内容追加模块 |
--with-http_xslt_module=dynamic | 动态编译XSLT样式表转化XML响应模块 |
--with-http_image_filter_module=dynamic | 动态编译图像转换模块 |
--with-http_geoip_module=dynamic | 动态编译客户端IP解析城市地址模块 |
--with-http_sub_module | 编译字符串替换模块 |
--with-http_dav_module | 编译WebDAV协议支持模块 |
--with-http_flv_module | 编译FLV文件伪流媒体服务器支持模块 |
--with-http_mp4_module | 编译MP4文件伪流媒体服务器支持模块 |
--with-http_gunzip_module | 编译gzip压缩兼容模块 |
--with-http_gzip_static_module | 编译发送gz预压缩文件数据模块 |
--with-http_auth_request_module | 编译请求认证模块 |
--with-http_random_index_module | 编译随机首页模块 |
--with-http_secure_link_module | 编译请求连接认证模块 |
--with-http_degradation_module | 编译内存不足响应模块 |
--with-http_slice_module | 编译文件切片模块 |
--with-http_stub_status_module | 编译运行状态模块 |
--with-stream=dynamic | 动态编译TCP/UDP代理模块 |
--with-stream_ssl_module | 编译TCP/UDP代理SSL支持模块 |
--with-stream_realip_module | 编译TCP/UDP代理真实IP模块 |
--with-stream_geoip_module=dynamic | 动态编译地域信息解析模块 |
--with-stream_ssl_preread_module | 编译TCP/UDP代理点SSL预处理模块 |
--with-compat | 启用file aio支持 |
--with-pcre-jit | pcre JIT支持,可以提升处理正则表达式的速度 |
--with-http_perl_module=dynamic | 动态支持perl模块的使用 |
--with-pcre | 编译支持pcre |
--with-debug | 进一步地了解页面访问出现问题的原因 |
5、添加nginx可执行文件
# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
安装成系统服务
# cat >/usr/lib/systemd/system/nginx.service <<EOF
[Unit] # 记录service文件的通用信息
Description=The Nginx HTTP and reverse proxy server # Nginx服务描述信息
After=network.target remote-fs.target nss-lookup.target # Nginx服务启动依赖,在指定服务之后启动
[Service] # 记录service文件的service信息
Type=forking # 标准UNIX Daemon使用的启动方式
PIDFile=/run/nginx.pid # Nginx服务的pid文件位置
ExecStartPre=/usr/bin/rm -f /run/nginx.pid # Nginx服务启动前删除旧的pid文件
ExecStartPre=/usr/local/nginx/sbin/nginx -t -q # Nginx服务启动前执行配置文件检测
ExecStart=/usr/local/nginx/sbin/nginx -g "pid /run/nginx.pid;" # 启动Nginx服务
ExecReload=/usr/local/nginx/sbin/nginx -t -q # Nginx服务重启前执行配置文件检测
ExecReload=/usr/local/nginx/sbin/nginx -s reload -g "pid /run/nginx.pid;" # 重启Nginx服务
ExecStop=/bin/kill -s HUP $MAINPID # 关闭Nginx服务
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install] # 记录service文件的安装信息
WantedBy=multi-user.target # 多用户环境下启用
EOF
重新加载系统服务并启动
# systemctl daemon-reload
# systemctl start nginx.service # 启动Nginx服务命令
# systemctl enable nginx.service # 将Nginx服务注册为系统启动后自动启动
# systemctl reload nginx # reload Nginx服务命令
# systemctl stop nginx # stop Nginx服务命令
# systemctl status nginx # 查看Nginx服务运行状态命令
四、包管理安装
yum安装
# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# yum -y install nginx
# systemctl start nginx
# systemctl enable nginx
# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 46650/nginx: master
五、使用Docker
# docker run --name nginx -p 80:80 -d nginx:latest
六、Nginx版本
版本 | 链接 |
---|---|
Nginx开源版 | http://nginx.org/ |
Nginx plus 商业版 | https://www.nginx.com |
Openresty | http://openresty.org |
Tengine | http://tengine.taobao.org/ |
评论区