简介
- Nginx(发音为“Engine X”)是一款轻量级和高性能的 Web 服务器、反向代理服务器、电子邮件(IMAP/POP3/SMTP)代理服务器,是带有 BSD-like 协议的开源产品。
- 其特点包括:
- 轻量级:Nginx 以其轻量级和高效性而闻名,对系统资源的占用非常小;
- 高并发能力:Nginx 能够处理大量的并发连接,这使得它在面对高流量网站时表现出色,在同类 Web 服务器中是领先的;
- 反向代理功能:作为反向代理服务器,Nginx 可以帮助提高网站的响应速度和可用性,同时隐藏后端服务器的复杂性,这使得 Nginx 在负载均衡和缓存方面非常有用;
- 社区支持:作为一个开源项目,Nginx 拥有一个活跃的开发者和用户社区,这意味着它经常得到更新和改进,以适应不断变化的网络环境;
- 安全性:Nginx 提供了多种安全措施,包括 SSL/TLS 加密支持,以及限制请求速率等,帮助网站防御各种网络攻击;
- 广泛应用:全球范围内,许多知名的大型网站和服务都在使用 Nginx,这证明了它的可靠性和性能。
部署
linux
- docker部署
- docker-compose.yaml如下
version: '3'
services:
nginx:
restart: always
container_name: nginx
image: nginx
ports:
- 8090:80
volumes:
- ./data/logs:/var/log/nginx
日志
存放在 /var/log/nginx 下,格式由【nginx.conf】【log_format】中定义。
- access.log
参数 说明 示例
$remote_addr 客户端地址 172.17.0.1
$remote_user 客户端用户名称 --
$time_local 访问时间和时区 [29/Dec/2022:10:17:14 +0000]
$request 请求的URI和HTTP协议 "GET /test/nginx/proxy HTTP/1.1"
$http_host 请求地址,即浏览器中你输入的地址(IP或域名) 10.1.7.33
$status HTTP请求状态 200
$upstream_status upstream状态 200
$body_bytes_sent 发送给客户端文件内容大小 38
$http_referer url跳转来源 -
$http_user_agent 用户终端浏览器等信息 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
$http_cookie 用户cookie信息 "grafana_session=73d13d456cb4363f8a48f5501348669e"
$ssl_protocol SSL协议版本 TLSv1
$ssl_cipher 交换数据中的算法 RC4-SHA
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址 "10.1.7.33:8102"
$request_time 整个请求的总时间 0.012
$upstream_response_time 请求过程中,upstream响应时间 0.012
- error.log
logrotate
- logrotate是Linux系统中的日志管理工具,它可以自动地轮换、压缩、删除和邮件系统日志文件。logrotate可以处理任何你想要的日志文件,并且不需要修改日志生成的方式。
示例:每天创建前一天的日志文件,文件保留7天
- 在【/etc/logrotate.d/】增加配置文件【nginx】 ,内容如下(如果是每小时调度,则将daily改为hourly)
/var/log/nginx/access.log {
daily
missingok
rotate 7
dateext
dateformat -%Y%m%d
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
- 配置是否生效测试
# 进入容器
docker exec -it <container_id> /bin/bash
# 执行文件分割
logrotate -f /etc/logrotate.d/nginx
# 查看日志是否分割成功
ls -l /var/log/nginx
# 验证nginx是否正常进行
ps aux | grep nginx
# 查看日志是否已迁移至分割文件
cat /var/log/nginx/access.log
# 查看状态文件是否有记录值
cat /var/lib/logrotate/status
- 调度:由linux自带的【cron】调度
# 查看cron的运行状态
service cron status
# 查看cron的调度计划
cat /etc/corntab
- 自定义logratate的调度时间
每小时的0分调度,调度信息写入【/var/log/cron.log】
RUN echo "0 * * * * root /usr/sbin/logrotate -f /etc/logrotate.d/nginx > /var/log/cron.log 2>&1" >> /etc/crontab
- error: Ignoring /etc/logrotate.d/nginx because it is writable by group or others
chmod 644 /etc/logrotate.d/nginx
反向代理配置
- 配置文件【/etc/nginx/nginx.conf】
- 默认配置中包含
include /etc/nginx/conf.d/*.conf;
,因此可在【/etc/nginx/conf.d】自定义配置。 - 【/etc/nginx/conf.d/default.conf】是默认配置,可选择覆盖或者删除后自定义文件。
location
- 第一,若proxy_pass代理地址端口后无任何字符,则转发后地址为:代理地址+访问的path(表格1的1、3行,端口后面没有字符,转发后的地址带着location匹配的部分)。
- 第二,若proxy_pass代理地址端口后有目录(包括"/"),则转发后地址为:代理地址+访问的path去除location匹配的路径(表格1的2、4行以及表格2,都是端口后面有/或目录,转发后的地址去除location匹配的部分)。