ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

从零学nginx-配置反向代理

2019-09-21 12:37:06  阅读:317  来源: 互联网

标签:http 零学 format 转发 nginx 反向 proxy upstream 服务器


nginx反向代理工作方式

nginx反向代理工作方式

nginx作为方向代理服务器,其工作方式有两个点需要注意:

  1. 当转发请求的时候,nginx会接收完所有的请求数据,再去转发请求。
  2. 在响应的时候,nginx是一边接收响应数据,一边将响应数据返回给客户端的。

配置upstream

配置示例:

upstream testUrl{
    #ip_hash;
    server 服务器1  #weight=5  max_fails=3  fail_timeout=30s  down;
    server 服务器2;
}

首先我们需要定义一个上有服务,name为testUrl,这个upstream中包含以下属性:

属性名 作用描述 备注
ip_hash 负载均衡策略,如果不配置,默认为轮询 不能和weight一起使用
server 指定这个upstrem中包含哪些上游服务
weight 负载均衡策略为轮询时各服务的比重 不能和ip_hash一起使用
max_fails 在fail_timeout时间内,失败次数超过max_fails,则认为服务不可用 默认为1
fail_timeout 和max_fails一起使用 默认10s
down 下线服务器 和ip_hash一起使用

配置访问日志

我们可以在http模块中使用log_format定义一个log的格式:

log_format  format_name  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for" '
					     '$upstream_addr $upstream_cache_status';

这里其实就是拿nignx的一些变量来组装成日志的输出格式,除了nginx默认的日志内容,如果想要添加目标服务器的信息可以添加一下参数:

变量 含义
$upstream_addr 访问的上游服务器的地址
$upstream_cache_status 是否命中缓存
$upstream_status 上游服务器的响应状态
$upstream_response_time 上游服务器的响应时间

更多全量的参数建议去官方文档查看有哪些内置变量。
定义好log_format后,我们只需要在打开日志的时候指定format即可:

access_log  日志输出地址 format_name;

配置server模块

server{
    proxy_pass  http://testUrl;
    proxy_method  POST;
    proxy_pass_request_body on;
    proxy_next_upstream http_404;
}

下表是对server模块中的属性的作用的描述:

属性名 作用 备注
proxy_pass 将拦截到的请求转发到指定的上游服务 可以是一个具体的地址,也可以是upstram的name
proxy_method 将请求转发成指定的method 不管原始请求的method是什么,经过转发后到上游服务器的method为指定的这个
proxy_hide_header 指定哪些head字段不会被转发 默认不转发的有:Date、Server、X-Pad和X-Accel-*
proxy_pass_header 指定哪些head字段要转发
proxy_pass_request_body 是否向上游服务器发送body 默认是发送
proxy_next_upstream 当处理请求的上游服务器出现异常的时候,继续换一台服务器处理的策略 默认是当出现error和timeout的时候,语法为:proxy_next_upstream[error timeout invalid_header http_500 http_502 http_503 http_504 http_404 off]; off为出错就直接转发

标签:http,零学,format,转发,nginx,反向,proxy,upstream,服务器
来源: https://blog.csdn.net/mazhen1991/article/details/101103065

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有