目录
Nginx是一款高性能、轻量级Web服务软件。稳定性高,系统资源消耗低,对HTTP并发连接的处理能力高,单台物理服务器理论上可支持 30 000~50 000 个并发请求,实际约 2~3 万。
需要准备Nginx源码包nginx-1.12.0.tar.gz
(1)关闭防火墙和selinux
- systemctl stop firewalld
- systemctl disable firewalld
- setenforce 0
(2)安装依赖包
nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
(3)创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
(4)编译安装Nginx源码包
- #在opt目录下解压源码包
- cd /opt
- tar zxf /tmp/VMwareDnD/npLsWu/nginx-1.12.0.tar.gz
-
- #到源码包中自定义编译安装
- cd nginx-1.12.0/
- ./configure \
- --prefix=/usr/local/nginx \ #指定nginx的安装路径
- --user=nginx \ #指定用户名
- --group=nginx \ #指定组名
- --with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计
-
- #编译安装
- make && make install
-
- #让系统识别nginx的操作命令
- ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
(5)nginx服务的检查、启动、重启、停止、生成日志和升级
nginx -V //查看版本和编译安装选项(-v 只查看版本号)
nginx -t //检查nginx配置文件的语法
nginx //开启nginx服务
cat nginx.pid //查看nginx进程pid号
kill -3 pid号 //关闭nginx服务
kill -s QUIT pid号
kill -1 pid号 //重载nginx服务
kill -s HUP pid号
kill -USR1 pid号 //重新生成日志文件(用于分割日志到系统日志文件目录下)
kill -USR2 pid号 //平滑升级nginx版本(需要提前编译好新版的安装包,然后能在服务不关闭的情况下升级)
编译后查看
只需要替换原版安装的nginx文件即可完成升级(可先做备份)
注意点(不影响升级):
make upgrade过程中报的错是由于nginx不是通过/usr/local/nginx/sbin/nginx启动的,而是通过$PATH中的软连接启动的。
解决办法:
要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的;或者先 killall nginx ,再使用 /usr/local/nginx/sbin/nginx 。
(6)添加 nginx 系统服务(通过systemctl管理)
chkconfig:2345 20 90 代表服务在2345启动级别中,第20个进程自启,第90个进程关闭。
chkconfig:- 代表不开机自启
- #编写服务配置文件
- vim /etc/init.d/nginx
- #!/bin/bash
- #chkconfig: 2345 20 99
- #description:Nginx Service Control Script
- COM="/usr/local/nginx/sbin/nginx"
- PID="/usr/local/nginx/logs/nginx.pid"
- case "$1" in
- start)
- $COM
- ;;
-
- stop)
- kill -s QUIT $(cat $PID)
- ;;
-
- restart)
- $0 stop
- $0 start
- ;;
-
- reload)
- kill -s HUP $(cat $PID)
- ;;
-
- *)
- echo "Usage: $0 {start|stop|restart|reload}"
- exit 1
-
- esac
- exit 0
-
- #添加到系统服务
- chmod +x /etc/init.d/nginx
- chkconfig --add nginx
- systemctl stop nginx
- systemctl start nginx
nginx 主配置文件 /usr/local/nginx/conf/nginx.conf
所有配置字段块的作用
全局块 | 全局配置,对全局生效 |
events块 | 配置影响 Nginx 服务器与用户的网络连接 |
http块 | 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置 |
server块 | 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块 |
location块 | 用于配置匹配的 uri |
upstream块 | 配置后端服务器具体地址,负载均衡配置不可或缺的部分 |
(1)修改全局配置
Nginx的两种进程:
- 主进程(master process),用于管理工作进程。
- 工作进程(work process),用于处理用户的连接(一般设置数与cpu总线程数一致)。
修改为与本机cpu数一致
将work进程与特定物理cpu核心绑定(避免切换核心,提高性能)
双核设为 worker_cpu_affinity 01 10;
(2)添加 I/O事件配置
默认只有一行配置,添加use epoll; 表示使用epoll I/O模型,可以提高性能。
(2.6及以上版本的系统内核,建议使用epoll模型)
在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
由于一个nginx服务器最大可以支持2~3万连接数,我们需要根据本机工作进程数修改每个进程支持的连接数(如我本机设置为8,约可修改为3500)
如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数(永久修改需要修改/etc/security/limits.conf 文件)。
可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
临时修改
永久修改
修改/etc/security/limits.conf文件,添加如下字段
注意
- 软限制soft 和硬限制hard 必须都添加才能生效
- 软限制值 <= 硬限制值
- 重启系统后生效!!!
重启后查看
(3)HTTP配置
日志格式设定
$remote_addr $http_x_forwarded_for | 记录客户端的ip地址 通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。 反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。 |
$remote_user | 用来记录客户端用户名称 |
$time_local | 用来记录访问时间与时区 |
$request | 用来记录请求的url与http协议 |
$status | 用来记录请求状态;成功是200 |
$body_bytes_sent | 记录发送给客户端文件主体内容大小 |
$http_referer | 用来记录从哪个页面链接访问过来的 |
$http_user_agent | 记录客户浏览器的相关信息 |
其中的server字段代表站点web服务配置(有几个站点就有几个server字段)
location常见配置指令:root、alias、proxy_pass
root(根路径配置)root 后加路径,代表指定网页根路径,默认值是html(相对路径,代表/usr/local/nginx/html),location 后的 / ,代表root指定路径的根。
例:location /test , root /var/www/html , 代表访问指定根路径/var/www/html 下的 /test 中的页面 。
alias(别名配置)在location 指定路径的字段定义别名,之后访问指定路径,就是别名指定的路径。
例: location /test ,alisa /var/www/html ,访问服务器地址下的 /test 目录 ,指向的是/var/www/html 中的页面。
proxy_pass(反向代理配置)
(1)为虚拟主机提供域名解析
配置DNS
修改/etc/hosts文件
(2)为虚拟主机准备网页文档
- #创建网页目录
- mkdir -p /var/www/html/abc
- mkdir -p /var/www/html/def
-
- #编写简易首页html文件
- echo "
welcome to www.abc.com
" > /var/www/html/abc/index.html - echo "
welcome to www.def.com
" > /var/www/html/def/index.html
(3)修改nginx配置文件
(4)检查语法并重启,访问测试
(1)添加网络接口
(2)修改nginx配置文件
(3)检查语法并重启,访问测试
(1)修改配置文件中监听端口
(2)检查语法并重启,访问测试
cat /opt/nginx-1.12.0/auto/options 可查看安装软件的所有模块(YES表示已安装)
1.先查看已安装的Nginx是否包含 HTTP_STUB_STATUS 模块
2.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置
先恢复默认配置,再修改nginx.conf
3.检查配置并重启服务,测试访问
Active connections : | 表示当前的活动连接数 |
server accepts handled requests 1 1 2 | 表示已经处理的连接信息 3个数字依次表示已处理的连接数、成功的TCP握手次数、 已处理的请求数。 |
可使用 curl -Ls http://192.168.80.10/status 模拟访问页面并输出,结合 awk与 if 语句进行性能监控。
- //模拟访问并输出
- [root@localhost1 conf]#curl -Ls http://192.168.116.10/status
- Active connections: 1
- server accepts handled requests
- 3 3 5
- Reading: 0 Writing: 1 Waiting: 0
-
- //获取活动连接数
- [root@localhost1 conf]#curl -Ls http://192.168.116.10/status | awk '/Active/ {print $3}'
- 1
(1)下载依赖软件,生成用户密码认证文件,修改密码文件权限
(2)修改主配置文件对应目录,添加认证配置项
(3)检查配置并重启服务,测试访问
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。
(1)修改配置文件,允许以下两个地址访问,拒绝其他
(2)检查配置并重启服务,测试访问