目录
2.2 编译安装:关闭防火墙,将安装 ngnix 所需的软件包上传到 /opt 目录下
2.5 添加 Nginx 系统服务,使用systemctl工具控制
2.6 修改默认日志文件格式,添加压缩配置,添加监控配置,具体可根据自己的需求修改
一.、Nginx 概述
1.1 什么是Nginx?
一款高性能、轻量级Web服务软件
-
稳定性高
-
系统资源消耗低 (协程 回调)
-
对HTTP并发连接的处理能力高 (epoll I/O多路复用)
-
单台物理服务器可支持30 000~50 000个并发请求
-
1.2 Nginx的httpd七层代理和四层代理
nginx的http七层代理,nginx工作在osl七层模型的应用层。由于其可以解析http协议,我看可以根据url进行请求的分发,具有很大的灵活性,但是协议的解析存在性能的消耗,为了能获取更高的代理性能。
nginx支持了四层代理,即传输层,tcp/udp层,没有协议解析,就是简单的tcp/udp转发,代理性能突飞猛进。
1.3 Nginx和Apache的区别
- Nginx是一个基于事件的Web服务器,Apache是一个基于流程的服务器。
- Nginx所有请求都是由一个线程处理,Apache单个线程处理单个请求。
- Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方便一般。
- Nginx的性能和伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件。
- Nginx支持热部署,Apache不支持热部署。
- Nginx对于静态文件处理具有高效率,Apache相对一般。
- Nginx在反向代理场景具有明显优势,Apache相对一般
二、编译安装Nginx服务(配置监控模块)
2.1 Nginx 监控模块简介
监控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对时序数据进行查询和聚合。
2.2 编译安装:关闭防火墙,将安装 ngnix 所需的软件包上传到 /opt 目录下
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
2.3 安装依赖包
yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel make
#添加的openssl是一种加密的手段
2.4 编译安装Ngin
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 #创建用户管理服务
2.5 添加 Nginx 系统服务,使用systemctl工具控制
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
2.6 修改默认日志文件格式,添加压缩配置,添加监控配置,具体可根据自己的需求修改
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;
}
}
2.7 启动服务
systemctl enable nginx.service --now
2.8 访问测试(首页)
http://ip
2.9 访问状态监控模块
http://ip/status
三 、Nginx主配置文件
/usr/local/nginx/conf/nginx.conf 主配置文件位置
3.1 全局配置![](https://i-blog.csdnimg.cn/blog_migrate/f20c9ebbff55d3b9b2bb1939e480817e.png)
3.2 l/O事件配置
3.3 http模块
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;
}
}
}
3.4 日志格式设定
$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服务配置案例
Nginx支持的虚拟主机
-
基于域名的虚拟主机
-
基于IP的虚拟主机
-
基于端口的虚拟主机
通过"server{}"配置段实
4.1 基于域名的 Nginx 虚拟主机
① 添加域名解析
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;
}
}
4.1.1 分别为不同的域名准备不同主页
4.1.2 进入配置文件设置指向
4.1.3 编辑主页文件,用来区分
4.1.4 设置DNS解析
vim hosts
4.1.5 测试
systemctl restart nginx.service 重启服务
4.2 基于端口的虚拟主机
可以在实验4.1的基础上,修改部分配置,达到实验2
4.2.1 修改两个server 监听的端口
4.2.2 修改页面文件,保证区别
4.2.3 进行测试