目录
一.、Nginx 概述
1.1 什么是Nginx?
1.2 Nginx的httpd七层代理和四层代理
1.3 Nginx和Apache的区别
二、编译安装Nginx服务(配置监控模块)
2.1 Nginx 监控模块简介
2.2 编译安装:关闭防火墙,将安装 ngnix 所需的软件包上传到 /opt 目录下
2.3 安装依赖包
2.4 编译安装Ngin
2.5 添加 Nginx 系统服务,使用systemctl工具控制
2.6 修改默认日志文件格式,添加压缩配置,添加监控配置,具体可根据自己的需求修改
2.7 启动服务
2.8 访问测试(首页)
2.9 访问状态监控模块
三 、Nginx主配置文件
3.1 全局配置编辑
3.2 l/O事件配置
3.3 http模块
3.4 日志格式设定
四、nginx服务配置案例
4.1 基于域名的 Nginx 虚拟主机
4.1.1 分别为不同的域名准备不同主页
4.1.2 进入配置文件设置指向
4.1.3 编辑主页文件,用来区分
4.1.4 设置DNS解析
4.1.5 测试
4.2 基于端口的虚拟主机
4.2.1 修改两个server 监听的端口
4.2.2 修改页面文件,保证区别
4.2.3 进行测试
一款高性能、轻量级Web服务软件
稳定性高
系统资源消耗低 (协程 回调)
对HTTP并发连接的处理能力高 (epoll I/O多路复用)
单台物理服务器可支持30 000~50 000个并发请求
nginx的http七层代理,nginx工作在osl七层模型的应用层。由于其可以解析http协议,我看可以根据url进行请求的分发,具有很大的灵活性,但是协议的解析存在性能的消耗,为了能获取更高的代理性能。
nginx支持了四层代理,即传输层,tcp/udp层,没有协议解析,就是简单的tcp/udp转发,代理性能突飞猛进。
监控Nginx主要用到以下三个模块:
1、nginx-module-vts:Nginx virtual host traffic status module,Nginx的监控模块,能够提供JSON格式的数据产出。
2、nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。
3、Prometheus:监控Nginx-vts-exporter提供的Nginx数据,并存储在时序数据库中,可以使用PromQL对时序数据进行查询和聚合。
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel make
#添加的openssl是一种加密的手段
tar zxvf nginx-1.15.9.tar.gz -C /opt/
#不同nginx软件包之间的区别:1.15.9只能做对七层的控制 1.21和1.18 可以做到对七层和四层的控制
unzip nginx-module-vts-master.zip
#将上传的模块也进行解压
mv nginx-module-vts-master /usr/local/
cd /opt/nginx-1.15.9
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--add-module=/usr/local/nginx-module-vts-master #添加编译安装监控模块
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #优化路径
useradd -M -s /sbin/nologin nginx #创建用户管理服务
vim /lib/systemd/system/nginx.service
###配置参数##
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
###配置参数##
chmod 754 /lib/systemd/system/nginx.service
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
vhost_traffic_status_zone; #流量状态监控
#vhost_traffic_status_filter_by_host on;
PS:开启此功能,在Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上。
假如nginx没有规范配置server_name或者无需进行监控的server上,那么建议在此vhost上禁用统计监控功能。否则会出现“127.0.0.1”,hostname等的域名监控信息
###以下内容需要添加进去###
log_format main '{ "@timestamp": "$time_local", '
'"@fields": { '
'"uri":"$request_uri",'
'"url":"$uri",'
'"upstream_addr":"$upstream_addr",'
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"host":"$host",'
'"server_addr":"$server_addr",'
'"request_time": "$request_time", '
'"request_time":"$request_time",'
'"status":"$status",'
'"request": "$request", '
'"request_method": "$request_method", '
'"size":$body_bytes_sent,'
'"upstream_time":"$upstream_response_time"'
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" } }';
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
..............
}
server {
..............
location / {
root html;
index index.html index.htm;
}
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
systemctl enable nginx.service --now
http://ip
http://ip/status
/usr/local/nginx/conf/nginx.conf 主配置文件位置
http {
##文件扩展名与文件类型映射表
include mime.types;
##默认文件类型
default_type application/octet-stream;
##日志格式设定
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
##访问日志位置
#access_log logs/access.log main;
##支持文件发送(下载)
sendfile on;
##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
#tcp_nopush on;
##连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
##gzip模块设置,设置是否开启gzip压缩输出
#gzip on;
##Web 服务的监听配置
server {
##监听地址及端口
listen 80;
##站点域名,可以有多个,用空格隔开
server_name www.kgc.com;
##网页的默认字符集
charset utf-8;
##根目录配置
location / {
##网站根目录的位置/usr/local/nginx/html
root html;
##默认首页文件名
index index.html index.php;
}
##内部错误的反馈页面
error_page 500 502 503 504 /50x.html;
##错误页面配置
location = /50x.html {
root html;
}
}
}
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
location常见配置指令,root、alias、proxy_pass
root(根路径配置):root /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html
alias(别名配置):alias /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html
proxy_pass(反向代理配置
Nginx支持的虚拟主机
基于域名的虚拟主机
基于IP的虚拟主机
基于端口的虚拟主机
通过"server{}"配置段实
① 添加域名解析
echo "192.168.114.200 www.accp.com www.benet.com" >> /etc/hosts
② 准备虚拟站点网页文档
mkdir /usr/local/nginx/html/server1
mkdir /usr/local/nginx/html/server2
cp /usr/local/nginx/html/index.html cp -p /usr/local/nginx/html/server1
cp /usr/local/nginx/html/index.html cp -p /usr/local/nginx/html/server2
vim /usr/local/nginx/html/server1/index.html
vim /usr/local/nginx/html/server1/index.html
##修改配置文件
http {
……
server {
listen 80;
server_name www.sever1.com;
charset utf-8; #修改下中文字符集
access_log logs/accp.access.log; #保存日志打开,专属于此server的日志。
location / {
root /usr/local/nginx/html/server1; #修改默认识别的位置
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.sever2.com;
charset utf-8;
access_log logs/benet.access.log;
location / {
root /usr/local/nginx/html/server2;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
vim hosts
systemctl restart nginx.service 重启服务
可以在实验4.1的基础上,修改部分配置,达到实验2