【nginx】反向代理服务

简介

  • 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匹配的部分)。
    在这里插入图片描述

测试用例

文档

docker部署nginx
Nginx的location路径匹配规则
配置 Nginx 访问与错误日志

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值