目录
一、Nginx概述
Nginx是一款高性能、轻量级Web服务软件。稳定性高,系统资源消耗低,对HTTP并发连接的处理能力高,单台物理服务器理论上可支持 30 000~50 000 个并发请求,实际约 2~3 万。
二、Nginx相对于Apache的优点
- 轻量化,Nginx 比 Apache占用更少的内存及资源;
- 静态处理,Nginx 静态处理性能比 Apache 高;
- Nginx可以实现无缓存的反向代理加速,提高网站运行速度;
- Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;
- Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;
- nginx是异步进程,多个连接可以对应一个进程;apache是同步多进程,一个连接对应一个进程;
- Nginx高度模块化,编写模块相对简单,且组件比Apache少;
- 高并发下Nginx 能保持低资源低消耗高性能;
- Nginx 配置简洁,Apache配置复杂;
三、配置Nginx网络服务
1.编译安装和启用Nginx服务
(1)关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
(2)安装依赖包
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文件即可完成升级(可先做备份)
(6)添加 nginx 系统服务(通过systemctl管理)
#编写服务配置文件
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
2.修改Nginx主配置文件
所有配置字段块的作用
全局块 | 全局配置,对全局生效 |
events块 | 配置影响 Nginx 服务器与用户的网络连接 |
http块 | 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置 |
server块 | 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块 |
location块 | 用于配置匹配的 uri |
upstream块 | 配置后端服务器具体地址,负载均衡配置不可或缺的部分 |
(1)修改全局配置
修改为与本机cpu数一致
(2)添加 I/O事件配置
默认只有一行配置,添加use epoll; 表示使用epoll I/O模型,可以提高性能。
(2.6及以上版本的系统内核,建议使用epoll模型)
临时修改
永久修改
修改/etc/security/limits.conf文件,添加如下字段
重启后查看
(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 | 记录客户浏览器的相关信息 |
location常见配置指令:root、alias、proxy_pass
三、Nginx虚拟主机配置
1.基于域名
(1)为虚拟主机提供域名解析
-
配置DNS
-
修改/etc/hosts文件
(2)为虚拟主机准备网页文档
#创建网页目录
mkdir -p /var/www/html/abc
mkdir -p /var/www/html/def
#编写简易首页html文件
echo "<h1>welcome to www.abc.com</h1>" > /var/www/html/abc/index.html
echo "<h1>welcome to www.def.com</h1>" > /var/www/html/def/index.html
(3)修改nginx配置文件
(4)检查语法并重启,访问测试
2.基于域名
(1)添加网络接口
(2)修改nginx配置文件
(3)检查语法并重启,访问测试
3.基于端口
(1)修改配置文件中监听端口
(2)检查语法并重启,访问测试
四、Nginx访问状态统计
1.先查看已安装的Nginx是否包含 HTTP_STUB_STATUS 模块
2.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置
先恢复默认配置,再修改nginx.conf
3.检查配置并重启服务,测试访问
Active connections : | 表示当前的活动连接数 |
server accepts handled requests 1 1 2 | 表示已经处理的连接信息 3个数字依次表示已处理的连接数、成功的TCP握手次数、 已处理的请求数。 |
//模拟访问并输出
[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
五、Nginx配置访问控制
1.基于授权的访问控制
(1)下载依赖软件,生成用户密码认证文件,修改密码文件权限
(2)修改主配置文件对应目录,添加认证配置项
(3)检查配置并重启服务,测试访问
2.基于客户端的访问控制
(1)修改配置文件,允许以下两个地址访问,拒绝其他
(2)检查配置并重启服务,测试访问