【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:
      - 80: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
  • 无权限写文件
/var/log/nginx/access-*.log {
    su root root # 更改用户为root
    daily
    rotate 10
    dateext
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

access.log文件名每日动态生成

  • 需求:当服务有请求时,会生成对应日期的access.log文件。在这里插入图片描述
  • 实现方式:三方模块(参考, 常用变量
  • 实现过程:
    • 使用已编译好的镜像hub.dianchu.cc/docker.io/soulteary/prebuilt-nginx-modules:ngx-1.21.1-set-misc-master
    • 【nginx.conf】加载模块,并且定义日志文件格式在这里插入图片描述
    • 配置【server模块】设置变量的值(设置在【http模块】内不生效)在这里插入图片描述

反向代理配置

  • 配置文件【/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 访问与错误日志

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx的特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginxNginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。目前 Nginx 的1.0.0稳定版已发布,开发版本为0.9.x,稳定版为 0.8.x,历史稳定版为 0.7.x,建议使用 0.8系列作为生产版本。 Nginx 的源代码使用 2-clause BSD-like license。 Nginx 是一个很牛的高性能Web和反向代理服务器,它具有很多非常优越的特性: 在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。 Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。 作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last. fm 描述了成功并且美妙的使用经验。 Nginx 是一个安装非常的简单,配置文件非常简洁(还能够支持perl语法),Bugs非常少的服务器:Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
1. Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx。 2. Nginx 是一个很牛的高性能Web和反向代理服务器, 它具有有很多非常优越的特性:   在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue作为开发模型.   Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.   作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验.   Nginx 是一个 安装非常的简单 , 配置文件 非常简洁(还能够支持perl语法), Bugs非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够 不间断服务的情况下进行软件版本的升级.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值