内容概述
1.nginx之前回顾
-1.1 三种安装方式
-1.2 nginx 相关文件
2.nginx虚拟主机
-2.1 虚拟主机方式
-2.2 基于多ip的方式
-2.3 基于多域名的方式
-2.4 基于多端口的方式
-2.5 总结
3.nginx日志配置
-3.1 日志配置
-3.2 nginx日志
内容详细
1.nginx之前回顾
1.1 三种安装方式
1.epol源安装
2.官方源安装(需要配置官方源)
3.源码包安装
1)下载源码包
2)解压源码包
3)进入安装目录,生成二进制文件
4)编译
5)安装
1.2 nginx 相关文件
rpm -ql nginx 可以查看整体的目录结构以及对应的功能
1.2.1. nginx的主配置文件
路径 |
类型 |
作用 |
/etc/nginx/nignx.conf |
配置文件 |
nginx主配置文件 |
/etc/nginx/conf.ddefault.conf |
配置文件 |
默认网站配置文件 |
1.2.2. nginx编码相关参数文件
路径 |
类型 |
作用 |
/etc/nginx/win-utf |
配置文件 |
nginx编码转换映射文件 |
/etc/nginx/koi-utf |
配置文件 |
nginx编码转换映射文件 |
/etc/nginx/kol-win |
配置文件 |
nginx编码转换映射文件 |
/etc/nginx/mime.types |
配置文件 |
Content-Type与拓展名 |
1.2.3. nginx代理相关文件
路径 |
类型 |
作用 |
/etc/nginx/fastcgi_params |
配置文件 |
Fastcgi代理配置文件 |
/etc/nginx/scgi_params |
配置文件 |
scgi代理配置文件 |
/etc/nginx/uwsgi_params |
配置文件 |
uwsgi代理配置文件 |
1.2.4. nginx管理相关命令
路径 |
类型 |
作用 |
/usr/sbin/nginx |
命令 |
nginx命令行管理终端工具 |
/usr/sbin/nginx-debug |
命令 |
nginx命令行与终端调试工具 |
1.2.5. nginx日志相关目录与文件
路径 |
类型 |
作用 |
/var/log/nginx |
目录 |
nginx默认存放日志目录 |
/etc/logrotate.d/nginx |
配置文件 |
nginx默认的日志切割 |
1.3nginx配置文件
1.Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的.一般,每个区块以一对大括号{}来表示开始与结束.
2.nignx主配置文件整体分为三块进行学习,分别是:
# CoreModule(核心模块)
# EventModule(事件驱动模块)
# HttpCoreModule(http内核模块)
配合文件的具体内容:
1)核心模块:
# 指定启动的用户
user www;
# nginx的worker进程的数量
worker_processes 1;
# 指定错误日志存放的路径以及记录的级别 debug/info/notice/warn/error/emerg
error_log /var/log/nginx/error.log warn;
# 指定pid文件
pid /var/run/nginx.pid;
2)事件驱动模块:
events {
# 每个worker进程工作进程的最大连接数
worker_connections 1024;
}
3)http内核模块:
http {
# 包含,nginx可识别的文件类型
include /etc/nginx/mime.types;
# 当nginx不识别文件类型的时候,默认下载
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 /var/log/nginx/access.log main;
# 高效传输
sendfile on;
# 高效传输
# tcp_nopush on;
# 开启长连接
keepalive_timeout 65;
# 开启压缩
# gzip on;
# 包含网站的配置文件
include /etc/nginx/conf.d/*.conf;
# 一个server表示一个网站
server {
# 监听端口
listen 80;
# 网站提供的域名
server_name localhost;
# 字符集
charset utf8;
# 匹配,控制访问的网站站点
location / {
# 指定站点目录
root /usr/share/nginx/html;
# 指定默认访问的页面
index index.html index.htm;
}
}
}
2.nginx虚拟主机
2.1 虚拟主机方式
1.nginx虚拟主机?
虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的.从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样.
2.虚拟主机能做什么?
利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程.虚拟主机提供了在同一台服务器,同一组Nginx进程上运行多个网站的功能.
3.实现虚拟主机的三种方式:
# 基于域名的虚拟主机
# 基于端口的虚拟主机
# 基于ip地址的虚拟主机
2.2 基于多ip的方式
ifconfig eth0:192.168.174.226/24
ip addr add 192.168.174.226/24 dev eth0
# 网卡添加子ip
# 配置第一个配置文件
cd /etc/nginx/conf.d
vim game1.conf
server {
listen 192.168.174.226:80;
location / {
root /tmp/html5-mario;
index index.html;
}
}
# 配置第二个配置文件
vim game2.conf
server {
listen 192.168.174.223:80;
location / {
root /tmp/html5-tank;
index index.html;
}
}
# 检查配置
nginx -t
# 重启服务
systemctl restart nginx
2.3 基于多域名的方式
# 配置第一个配置文件
cat /etc/nginx/conf.d/game1.conf
server {
listen 80;
server_name www.maliao.com;
location / {
root /tmp/html5-mario;
index index.html;
}
}
# 配置第二个配置文件
cat /etc/nginx/conf.d/game2.conf
server {
listen 80;
server_name www.tank.com;
location / {
root /tmp/html5-tank;
index index.html;
}
}
# 检查配置
nginx -t
# 重启服务
systemctl restart nginx
2.4 基于多端口的方式
# 第一个配置文件
cat /etc/nginx/conf.d/game1.conf
server {
listen 8080;
server_name localhost;
location / {
root /tmp/html5-mario;
index index.html;
}
}
# 第二个配置文件
cat /etc/nginx/conf.d/game2.conf
server {
listen 8090;
server_name localhost;
location / {
root /tmp/html5-tank;
index index.html;
}
}
# 检查配置
nginx -t
# 重启服务
systemctl restart nginx
2.5 总结
在nginx的虚拟主机类型中,基于域名的虚拟机应用最为广泛
1.基于端口和IP的虚拟主机类型,用户体验不好.
2.基于IP类型的虚拟主机,如在公网环境下使用,会产生额外费用.
3.基于域名的虚拟主机,一次付费,用户体验较好.
最后: 不管使用哪种虚拟主机,最终使用的都是本地主机现有资源.
3.nginx日志配置
3.1 日志配置
# 第一个配置
cat /etc/nginx/conf.d/game.conf
server {
listen 80;
server_name www.maliao.com;
access_log /var/log/nginx/www.maliao.com.log main; # 访问日志以main格式存放到目标地址
location / {
root /code/tuixiangzi;
index index.html;
}
}
# 第二个配置
cat /etc/nginx/conf.d/gametwo.conf
server {
listen 80;
server_name www.tank.com;
access_log /var/log/nginx/www.tank.com.log main; # 访问日志以main格式存放到目标地址
location / {
root /code/tank;
index index.html;
}
}
# 检查配置
nginx -t
# 重启服务
systemctl restart nginx
# 查看日志文件
ll /var/log/nginx/
total 104
-rw-r----- 1 nginx adm 54760 Aug 11 12:02 access.log
-rw-r----- 1 nginx adm 625 Aug 10 14:19 access.log-20210811
-rw-r----- 1 nginx adm 37009 Aug 11 12:02 error.log
-rw-r----- 1 nginx adm 265 Aug 9 23:33 error.log-20210811
总结:nginx运行优先遵循server内的配置,在遵循http,所以日志可以分类储存
3.2 nginx日志
nginx的日志记录模式非常灵活,每个级别的配置可以有各自独立的访问日志.日志格式可以通过log_format命令定义格式.
1nginx服务器日志相关指令主要有两条
1.一条是log_format,用来设置日志格式.
2. 另外一条是access_log,用来指定日志文件的存放路径,格式和缓存大小,一般在nginx的配置文件中日志配置(/usr/local/nginx/conf/nginx.conf).
3.2.1.日志格式
1.access_log 指令:
access_log path [format [buffer=size [flush=time]]];
access_Log path format gzip[=level] [buffer=size] [flush=time];
access_log syslog:server=address[,parameter=value] [format];
access_log off;
默认值: access_log logs/access.log combined;
默认值:http,server,location,if in location, limit_except
gzip 压缩等级.
buffer 设置内存缓存区大小.
flush 保存在缓存区中的最长时间
不记录日志: access_log off
使用默认combined 格式记录日志: access_log logs/access.log 或 access_log logs/access.log combined
2.log_format指令
语法: log_format name string ...;
默认值: log_format combined "...";
配置段: http
name 表示格式名称,string 表示等义的格式.log_format 有一个默认的无需配置的combined日志格式,相当于apache的combined日志格式,如下所示:
Syntax: log_format name [escape=default|json|none] string ...;
Default: log_format combined "...";
Context: http
3.2.2日常常用变量
$remote_addr # 记录客户端IP地址
$remote_user # 记录客户端用户名
$time_local # 记录通用的本地时间
$time_iso8601 # 记录ISO8601标准格式下的本地时间
$request # 记录请求的方法以及请求的http协议
$status # 记录请求状态码(用于定位错误信息)
$body_bytes_sent # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent # 发送给客户端的总字节数
$msec # 日志写入时间.单位为秒,精度是毫秒。
$http_referer # 记录从哪个页面链接访问过来的
$http_user_agent # 记录客户端浏览器相关信息
$http_x_forwarded_for # 记录经过的所有服务器的IP地址
$X-Real-IP # 记录起始的客户端IP地址和上一层客户端的IP地址
$request_length # 请求的长度(包括请求行,请求头和请求正文)
$request_time # 请求花费的时间,单位为秒,精度毫秒
# 注:如果Nginx位于负载均衡器,nginx反向代理之后,,web服务器无法直接获取到客 户端真实的IP地址.
# $remote_addr获取的是反向代理的IP地址.反向代理服务器在转发请求的http头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址.
3.2.3日志切割
# vim /etc/logrotate.d/nginx
# 指定要切割的日志
/var/log/nginx/*.log {
daily # 每天切割日志
missingok # 忽略日志丢失
rotate 52 # 日志保留时间 52天
compress # 日志压缩
delaycompress # 延时压缩
not if empty # 不切割空日志
create 640 nginx adm # 切割好的日志的权限
sharedscripts # 开始执行脚本
postrotate # 标注脚本内容
if [ -f /var/run/nginx.pid ]; then # 判断nginx启动
kill -USR1 `cat /var/run/nginx.pid` # 重新生成一个access.log文件
fi
endscript # 脚本执行完毕
}