Nginx 通过 rpm 安装包的方式安装
一、获取组件可执行程序库,包括主程序,此为组件的基本文件
1.官网获取 rpm 安装包 创建目录 /usr/local/nginx,将 rpm 包下载到该目录下
根据 [baseurl] 指定的路径,找到 nginx 各版本 rpm 安装包,
[root@localhost nginx]# wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpm
2. 安装依赖组件 根据官方安装步骤,需要先安装依赖工具,实测 CentOS7.5 默认已经加载,无需安装
yum install yum-utils
3. rpm 安装 执行 rpm 包安装
[root@localhost nginx]# rpm -ivh nginx-1.20.2-1.el7.ngx.x86_64.rpm
使用 rmp 安装,默认启用了所有 nginx 模块,如下
[root@localhost nginx]# nginx -V nginx version: nginx/1.20.2 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=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --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'
4. 查看 nginx 安装目录 rpm 安装 nginx 完成后,程序文件默认存放在多个目录
[root@localhost ~]# find / -name nginx /etc/logrotate.d/nginx /etc/nginx #主目录及配置文件 /var/log/nginx #日志 /var/cache/nginx #缓存 /usr/sbin/nginx #主程序 /usr/lib64/nginx #组件模块 /usr/share/nginx #html 主页
特别关注:以上目录其实在安装程序时指定,可以通过查看 nginx 版本命令确认安装时指定的参数,包括各项目录以及常用模块,如 stream
[root@localhost ~]# nginx -V nginx version: nginx/1.20.2 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=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --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'
二、安装系统服务
rpm 安装默认生成系统服务文件,可以通过 service 或 systemctl 命令操作
[root@localhost ~]# find / -name nginx.service /usr/lib/systemd/system/nginx.service
三、主程序加入到环境变量
rpm 安装默认已经将主程序添加到系统变量
[root@localhost ~]# ll /usr/sbin/nginx -rwxr-xr-x. 1 root root 1377720 11 月 16 23:03 /usr/sbin/nginx
四、配置文件
配置文件存放在 /etc/nginx/nginx.conf,启动时默认加载该路径,也可以在启动时指定配置文件,配置文件结构如下,分为 3 个部分:全局块、events 块、http 块
worker_processes 2; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
特别关注:配置文件中指定的所有路径,请在启动前确保已存在
配置文件说明 1.全局块 从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等
#定义 Nginx 运行的用户和用户组 user nginx nginx; #nginx 进程数,建议设置为等于 CPU 总核心数 worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /var/log/nginx/error.log info; #进程文件 pid /var/run/nginx.pid; #nginxworker 最大打开文件数,可设置为系统优化后的 ulimit -n 的结果 worker_rlimit_nofile 65535;
2.events 块
events { #epoll 模型是 Linux 2.6 以上内核版本中的高性能网络 I/O 模型,如果跑在 FreeBSD 上面,就用 kqueue 模型 use epoll; #单个 worker 进程最大连接数(nginx 最大连接数=worker 连接数*进程数) worker_connections 65535; }
3.http 块 这部分应该是 Nginx 服务器配置中最频繁的部分;代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。 http 块分为:http 全局块、server 块。 3.1http 全局块配置
http { #nginx 支持的媒体类型库文件 include mime.types; #默认媒体文件类型 default_type application/octet-stream; #默认编码 charset utf-8; #服务器名字的 hash 表大小 server_names_hash_bucket_size 128; #上传文件大小限制 client_header_buffer_size 32k; #开启高效文件传输模式,实现内核零拷贝 sendfile on; #开启目录列表访问,适合下载服务器,默认关闭。 autoindex off; #长连接超时时间,单位是秒 keepalive_timeout 120; }
3.2http server 块的配置,即虚拟主机的配置
server #网站配置区域 { #默认监听 80 端口 listen 80; #提供服务的域名主机名 server_name www.sample.com; location / { #站点根目录(这里 html 是相对路径,默认网站根目录为:/usr/local/nginx/html) root html; #默认首页文件,多个用空格分开 index index.thml index.htm; } #出现对应 http 状态码时,使用 50x.html 回应客户 error_page 500 502 503 504 /50x.html; location = /50x.thml { #指定对应目录 root html; } }
五、运行用户
默认使用 root 运行即可。
六、开机启动
请参考教程 Linux 开机启动方案
七、服务启动运行
通过 nginx 主程序启动服务,以服务器 192.168.11.14 为例
nginx -c /etc/nginx/nginx.conf
nginx 默认配置将作为 web 服务器运行,启动后在浏览器访问 http://192.168.11.14 即可打开页面,默认首页为 /usr/local/nginx/html/index.html,可以修改内容,显示当前服务器 IP
附录:关于 nginx 高并发配置优化
并发测试可以使用工具: Apache 自带的 ab 压力测试工具 与 nginx 并发控制相关的参数包括 ulimit -n(Linux 操作系统最大打开的文件描述符限制)、worker_processes、worker_rlimit_nofile、worker_connections、epoll(Linux IO 模型)。
- ulimit -n,操作系统最大打开的文件描述符限制,Linux 系统每一个 TCP 连接都是一个文件描述符
- worker_processes,worker 进程个数,全局模块配置,直接关系 nginx 并发处理能力,建议配置为 CPU 核心数,或者配置为 auto,自动根据 CPU 核心数创建 worker 进程个数
- worker_rlimit_nofile,每个 worker 进程打开的最多文件 描述符个数,全局模块配置,理论值应该是最多打开文件数(ulimit -n)与 nginx 进程数相除,但因为 nginx 分配请求未必很均匀,所以最好与 ulimit -n 的值保持一致;文件描述符包括 TCP 连接、打开本地文件等
- worker_connections,每个 worker 进程的最大连接数, event 模块配置,与 worker_processes 共同决定 nginx 最大连接数,worker_processes * worker_connections,配置为 >= (ulimit -n)即可发挥操作系统最大性能
- epoll,event 模块配置,具体为 use epoll
特别关注:查看 CPU 核心数(非 CPU 个数,一块 CPU 可以有多个核心)
[root@localhost ~]# cat /proc/cpuinfo | grep 'processor' | wc -l 4 [root@localhost ~]# lscpu | grep "CPU(s):" CPU(s): 4
特别关注:关于 Linux 操作系统最大打开的文件描述符限制 使用 ulimit -n 可即时修改,但重启后就无效了,要设置 /etc/security/limits.conf 配置文件,重启系统后才可以永久生效。 limits.conf 的格式如下
<domain> <type> <item> <value> domain: 限制作用的用户范围,通配符*表示是针对所有用户的限制,也可以指定用户,例如:root type: 限制类型 soft 指的是当前系统生效的最大值(超过后仅警告) hard 表明系统中所能设定的最大值(超过后系统错误) soft 的限制不能比 hard 限制高 - 表明同时设置了 soft 和 hard 的值 item: 限制的具体内容 nofile - 打开的文件描述符的最大数目 nproc - 进程最大数量 value: 具体限制值 示例:以下限制所有用户打开的文件描述符最大数目为 65535 * - nofile 65535
配置 ulimit 合并脚本,方便执行
ulimit -n 65535 && echo -e "*\t-\tnproc\t65535\n*\t-\tnofile\t65535" >> /etc/security/limits.conf
特别关注:ulimit -n 与 limits.conf 配置对 nginx 服务有时不生效 因为 ulimit 和 limits.conf 的配置只针对登录用户启动的应用服务 (nginx -c nginx.conf),而对 systemd 管理的服务不起作用(service nginx start),服务的 limit 要在相应的 service 文件中单独指定,具体可以参考 centos8 平台 nginx 服务配置打开文件限制 max open files limits
附录:location 配置规范与经验
location 是 nginx 使用最多的块级指令,建议了解学习 nginx location 配置规则与经验
特别关注 nginx 日志管理比较特殊,请参考 Linux 日志管理经验总结(crontab+logrotate)
附录:参考教程
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论