Nginx代理服务

代理的基本概述

  • 代理一词往往并不陌生,该服务我们常常用到(比如:代理租房),如下图所示:

  • 在没有代理模式的情况下,客户端和Nginx服务端,都是客户端直接请求服务端,服务端直接响应客户端。

  • 那么在互联网请求里面,客户端往往无法直接向服务端发起请求,那么就需要用到代理服务,来实现客户端和服务通信,如下图所示:

Nginx代理服务常见模式

Nginx作为代理服务,按照应用场景模式进行总结,代理可分为正向代理和反向代理。

  • 正向代理,(内部上网)客户端《 ==== 》代理====》服务端

  • 反向代理,用于公司集群架构中,客户端====》代理《 ==== 》服务端

    正向代理与反向代理的差别:
    区别在于形式上服务的"对象"不一样

  • 正向代理代理的对象是客户端,为客户端服务

  • 反向代理代理的对象是服务端,为服务端服务

Nginx代理服务支持协议

  1. Nginx作为代理服务,可支持的代理协议非常多,具体如下图:
  2. Nginx作为反向代理,常用的几种代理协议,如下图所示:
  3. 反向代理模式与Nginx代理模块总结如下所示
反向代理模式                           Nginx配置模块
http、websocket、https                ngx_http_proxy_module
fastcgi                             ngx_http_fastcgi_module
uwsgi                               ngx_http_uwsgi_module
grpc                                ngx-http_v2_module

Nginx反向代理配置实践

环境准备

角色           外网IP(NAT)               内网IP(NAT)               主机名
Proxy       eth0:192.168.15.5       eth1:172.16.1.5         lb01
web01       eth0:192.168.15.7       eth1:172.16.1.7         web01
  1. 配置后端的web服务(web01)
1. 修改配置文件
vim /etc/nginx/conf.d/web.nana.com.conf
server {listen 80;server_name web.nana.com;root /web;location / {index index.php index.html;}
}2. 创建配置文件指定的目录文件
mkdir /web
echo "web01..." > /web/index.html3. 启动Nginx服务
systemctl restart nginx
  1. 配置Nginx反向代理服务(lb01)
1. 安装yum包
yum -y install nginx2. 修改配置文件
vim /etc/nginx/conf.d/proxy_web.conf
server {listen 80;server_name web.nana.com;location / {proxy_pass http://192.168.15.7:80;   # 用户请求web.nana.com网站,代理服务器会把请求转交给192.168.15.7服务器的80端口   }
}3. 重启nginx
systemctl start nginx
  • 测试
在本机添加域名解析
C:\Windows\System32\drivers\etc
在hosts文件添加域名解析
192.168.15.7        zh.nana.com         blog.nana.com
192.168.15.5        web.nana.com    我们先打开本机的cmd,输入ping web.nana.com。
查看一下域名解析的ip地址是不是web02的ip地址(192.168.15.5)。
打开浏览器,输入web.nana.com。我们会发现,浏览器输出的结果为web01服务器blog.nana.com网站的内容。

为什么我们通过浏览器访问web.nana.com网站的内容,代理服务器返回给浏览器的内容是blog.nana.com的网站内容呢?

  • 我们通过lb01代理服务器访问web01服务端,进行数据查询。代理服务器会把请求转交给web01服务器的80端口,我们查看web01服务器/etc/nginx/conf.d目录下的文件,查看目录下文件的排列顺序,如下所示:
    blog.nana.com.confdefault.confweb.nana.com.confzh.nana.com.conf
  • 我们打开配置文件进行查看,发现所有配置文件监听的端口都是80端口,nginx默认会把/etc/nginx/conf.d目录下,最靠前的blog.nana.com.conf结果返回给浏览器。

    解决办法
  • 方法一 : 修改lb01代理服务器指向web01服务器的端口号,通过端口号去匹配web01服务器中的配置文件。
- lb01代理服务器
vim /etc/nginx/conf.d/proxy_web.conf
server {listen 80;              # 代理服务器监听浏览器端口号不需要改动...proxy_pass http://192.168.15.7:8080;...
}systemctl restart nginx- web01服务器
vim /etc/nginx/conf.d/
server {listen 8080;...
}systemctl restart nginx
  • 方法二:修改代理服务器的配置文件,让lb01代理服务器匹配web01服务器中的配置文件时,加上Host头信息web.nana.com
- lb01代理服务器
vim /etc/nginx/conf.d/proxy_web.conf
server {listen 80;server_name web.nana.com;location / {proxy_pass http://192.168.15.7:80;proxy_set_header Host $http_host;# 代理服务器匹配请求web01服务器的时候,默认加上Host头信息(域名)}
}systemctl restart nginx

Nginx反向代理相关参数

Nginx反向代理流程图
Nginx反向代理常用参数

- lb01代理服务器
vim /etc/nginx/conf.d/proxy_web.conf
server {listen 80;server_name web.nana.com;location / {proxy_pass http://192.168.15.7:80;proxy_set_header Host $http_host;  # 代理服务器匹配请求web01服务器的时候,默认加上Host头信息(域名)          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    # 追加客户端ip地址以及全链路ip地址到web服务器记录日志 # 默认情况下,Web节点服务器日志只记录了Nginx代理的IP地址。proxy_http_version 1.1;# 修改Nginx代理到Web节点服务器使用长连接(http1.1版本协议)# proxy_set_header X-Real-IP $remote_addr;      可加可不加参数,多层代理的情况下只记录最近一次的代理IP地址。     # 使用该参数,需要手动在主配置文件/etc/nginx/nginx.conf中的http层添加日志参数"$http_x_real_ip"。}location /favicon.ico {            return 200;                 # 忽略网页小图标加载,关闭日志记录access_log off;}
}systemctl restart nginx

Nginx反向代理其他相关参数

- Nginx反向代理时间相关参数(默认都是60秒)
proxy_connect_timeout 60s;          nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 60s;             nginx代理等待后端服务器的响应时间(代理响应超时)
proxy_send_timeout 60s;             后端服务器数据回传给nginx代理超时时间(回传数据给代理超时)- Nginx代理缓冲区
proxy_buffering on(/off);           nginx会把后端返回的内容先放到缓冲区中,然后再返回给客户端,边收边传,不是全部接收再传给客户端
proxy_buffers_size 4k;              设置nginx代理保存用户头信息的缓存区大小
proxy_buffers 8 8k;                 设置nginx代理缓冲区大小(8*8 = 64k)

Nginx反向代理常用优化配置

  • Proxy代理网站常用优化配置如下,将常用的配置参数写入新文件/etc/nginx/proxy_params,调用时使用include引用即可。
1. 创建常用的代理参数优化配置文件
vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;proxy_connect_timeout 30s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;2. 修改Nginx反向代理的配置文件
vim /etc/nginx/conf.d/proxy_web.conf
server {listen 80;server_name web.nana.com;location / {proxy_pass http://172.16.1.7:80;     # 生产环境中,nginx代理和web服务器在同一个局域网include proxy_params;              # 调用代理参数优化配置文件}
}systemctl restart nginx

Nginx反向代理的局限性 : 一个location仅能代理一台后端主机!!!

Nginx代理服务详解相关推荐

  1. Nginx配置详解/代理服务的配置说明

    Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...

  2. 本文来深入学习Nginx/OpenResty详解,Nginx到底是个什么鬼

    Nginx/OpenResty详解 Nginx(或OpenResty)在生产场景中使用的广泛程度已经到了令人咂舌的地步.无论其实际的市场占用率如何,以笔者这些年所经历的项目来看,其使用率为100%. ...

  3. Nginx Rewrite详解

    Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...

  4. Nginx 架构详解

    Nginx 架构详解 nginx的下篇将会更加深入的介绍nginx的实现原理.上一章,我们了解到了如何设计一个高性能服务器,那这一章将会开始讲解,nginx是如何一步一步实现高性能服务器的. Ngin ...

  5. nginx配置详解1

    Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error. ...

  6. Nginx rewrite 详解

    Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关 ...

  7. 配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解)

    配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解) 免费领取满减阿里云红包 项目名称:[域名解析–隐形URL转发]–centos 7.3 环境: 阿里云服务器之上有多个tomc ...

  8. 学完Nginx/OpenResty详解,反向代理与负载均衡配置,能涨薪多少

    反向代理与负载均衡配置 接下来介绍Nginx的重要功能:反向代理+负载均衡.单体Nginx的性能虽然不错,但也是有瓶颈的.打个比方:用户请求发起一个请求,网站显示的图片量比较大,如果这个时候有大量用户 ...

  9. nginx学习简介-安装-启动-命令-nginx配置文件详解

    nginx是什么:nginx是一个高性能的HTTP和反向代理web服务器.同时也提供了IMAP/POP3/SMTP服务. nginx特点:开源.占内存少.轻量级.高性能(有报告表面nginx能支持高达 ...

最新文章

  1. 辽师836c语言真题,2018年武汉科技大学考研真题硕士研究生入学考试试题
  2. 如何使用Arthas定位线上 Dubbo 线程池满异常
  3. AndroidStudio中打开新项目提示:This version of the Android Support plugin for IntelliJ IDEA (or Android Studi
  4. volatile超详细讲解
  5. Zuul:Pre和Post过滤器(下)
  6. 如何选择适合自己网站的防盗链
  7. 堰流实验报告思考题_堰流流量系数测定实验
  8. python数据预处理代码_Python中数据预处理(代码)
  9. b站whats app
  10. 快速阅读《构建之法》——构建之法阅读笔记01
  11. 关于12306Bypass
  12. _beginthread
  13. 固定资产管理系统php源码,固定资产管理系统源代码
  14. 电源篇-集成三端稳压器
  15. 计算机键盘灯光怎么关闭,如何关闭机械键盘的灯[图形介绍]
  16. 我的大学,被初恋女友甩了!
  17. ANSYS fluent
  18. NVDIMM编程模型原理大概推导梳理
  19. JS实现滚动栏的效果
  20. Cannot forward to error page for request ......

热门文章

  1. 微信公众平台后台接入简介
  2. 2017年12月至2019年6月英语六级真题重点单词词汇——频率由高到低排序
  3. 路径的使用技巧及抠图
  4. 乌班图系统重启服务器,如何快速重启ubuntu系统
  5. 根据cadence设计图学习硬件知识 day03 了解 一些芯片 和 数据手册下载的地方
  6. 计算机使用计划任务,使用任务计划设置电脑定时关机的方法
  7. LTE(4G) - NR(5G) RRC连接重配置(RRC Connection Reconfiguration)
  8. 谷歌广告联盟Adsense收不到Pin验证码怎么办?
  9. 一文学透设计模式——抽象工厂模式
  10. CSS小练习之鼠标hover图片特效