Nginx Proxy反向代理

这篇具有很好参考价值的文章主要介绍了Nginx Proxy反向代理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 反向代理原理

反向代理是一种网络架构,它通过将客户端的请求转发到后端服务器,并将后端服务器的响应返回给客户端,实现了客户端和服务器之间的间接通信。与正向代理不同,正向代理是代理客户端,而反向代理是代理服务器。

以下是反向代理的基本原理:

  1. 客户端发起请求: 客户端向反向代理服务器发送请求,通常请求的是某个资源(例如网页、图片或API)。
  2. 反向代理接收请求: 反向代理服务器接收到客户端的请求。
  3. 决定路由和负载均衡: 反向代理根据配置和算法,决定将请求转发给哪个后端服务器。这通常涉及到负载均衡,以确保请求在多个后端服务器之间分布均匀,提高系统的性能和可靠性。
  4. 向后端服务器发送请求: 反向代理服务器将收到的客户端请求再次发送给后端服务器。客户端不直接与后端服务器通信,所有的通信都经过反向代理。
  5. 后端服务器处理请求: 后端服务器接收到请求后,执行相应的处理,可能是获取数据、执行业务逻辑等。
  6. 后端服务器返回响应: 后端服务器将处理结果生成响应,并将响应发送给反向代理服务器。
  7. 反向代理接收响应: 反向代理服务器接收到后端服务器的响应。
  8. 向客户端返回响应: 最终,反向代理服务器将后端服务器的响应返回给客户端。

反向代理的优点包括:

  • 负载均衡: 可以分配流量到多个后端服务器,避免单一服务器过载。
  • 安全性: 可以隐藏后端服务器的真实IP地址,提高安全性。
  • 性能优化: 可以通过缓存静态资源、压缩数据等方式提高性能。
  • 灵活性: 可以灵活地配置路由规则、SSL终端等功能。

2. 正/反向代理的区别

2.1. 正向代理

正向代理是一种代理服务器架构,它充当客户端与目标服务器之间的中介,代表客户端向目标服务器发起请求。以下是正向代理的基本原理:

  1. 客户端配置代理: 客户端需要配置使用正向代理服务器。通常,客户端的网络设置中会指定正向代理的地址和端口。
  2. 客户端发起请求: 客户端向正向代理服务器发送请求,请求的目标是目标服务器上的某个资源(例如网页、文件、API等)。
  3. 正向代理接收请求: 正向代理服务器接收到客户端的请求。
  4. 代理服务器向目标服务器发起请求: 正向代理服务器根据客户端的请求,向目标服务器发起相应的请求。
  5. 目标服务器处理请求: 目标服务器接收到正向代理服务器的请求后,执行相应的处理,可能是获取数据、执行业务逻辑等。
  6. 目标服务器返回响应: 目标服务器生成响应,并将响应发送给正向代理服务器。
  7. 正向代理接收响应: 正向代理服务器接收到目标服务器的响应。
  8. 代理服务器返回响应给客户端: 最终,正向代理服务器将目标服务器的响应返回给客户端。

正向代理的主要用途包括:

  • 访问控制: 可以根据策略控制哪些客户端可以访问目标服务器,实现访问权限的控制。
  • 内容过滤: 可以对传输的数据进行过滤,例如屏蔽特定网站或内容。
  • 访问隐藏: 可以隐藏客户端的真实IP地址,保护客户端的隐私。
  • 访问加速: 可以缓存已经请求过的资源,提高访问速度。

2.2. 反向代理

从反向代理的角度来看,正向代理和反向代理有着不同的工作方式和应用场景。

  1. 方向:
    • 正向代理: 正向代理是代理客户端的代理服务器,客户端通过正向代理来访问其他服务器的资源。
    • 反向代理: 反向代理是代理服务器的代理服务器,客户端通过反向代理来访问目标服务器的资源。
  2. 作用对象:
    • 正向代理: 代理的是客户端,帮助客户端访问其他服务器上的资源,客户端需要配置使用正向代理。
    • 反向代理: 代理的是服务器,客户端无需配置,直接访问反向代理,由反向代理决定将请求转发给哪个后端服务器。
  3. 配置位置:
    • 正向代理: 需要在客户端进行配置,告诉客户端通过正向代理访问网络资源。
    • 反向代理: 需要在服务器端进行配置,以确定如何将请求转发给后端服务器。
  4. 隐匿性:
    • 正向代理: 可以用于隐藏客户端的真实IP地址,保护客户端隐私。
    • 反向代理: 可以用于隐藏后端服务器的真实IP地址,提高服务器的安全性。
  5. 用途:
    • 正向代理: 常用于绕过防火墙访问受限资源、提高访问速度、访问控制等。
    • 反向代理: 常用于负载均衡、安全性增强、隐藏后端服务器、统一入口等。
  6. 举例:
    • 正向代理: 用户通过VPN访问国外网站,VPN服务器充当正向代理,代理用户访问外部资源。
    • 反向代理: 公司内部有多个Web服务器,反向代理服务器接收外部用户的请求并将其转发到内部的Web服务器上。

3. 知识扩展

3.1. HTTP Server 和 Application Server的区别和联系

HTTP Server(Web Server)和 Application Server(应用服务器)是构建现代 web 应用程序时常见的两个组件,它们分别负责处理不同的任务,但在实际应用中通常需要协同工作。

  1. HTTP Server(Web Server):
    • 任务: HTTP Server 主要负责处理 HTTP 请求和响应。它处理静态内容(如 HTML、CSS、JavaScript 文件)的传输,以及处理客户端发起的动态资源请求。
    • 特点: HTTP Server 非常高效地处理静态资源,通常采用多线程或多进程的方式并发地为多个客户端提供静态文件。
  2. Application Server(应用服务器):
    • 任务: Application Server 负责执行应用程序的业务逻辑,处理动态内容的生成和交互。它通常与数据库交互,执行业务逻辑,生成动态内容,并将结果返回给 HTTP Server。
    • 特点: Application Server 是处理动态内容和业务逻辑的专门组件,能够执行服务器端代码,如处理用户请求、查询数据库、生成动态页面等。
  3. 区别和联系:
    • 静态 vs. 动态内容: HTTP Server 主要处理静态内容,而 Application Server 处理动态内容。
    • 通信协议: HTTP Server 使用 HTTP 协议进行通信,而 Application Server 可以使用不同的协议,如 FastCGI、WSGI(Web Server Gateway Interface)等,与 HTTP Server 进行通信。
    • 并发处理: HTTP Server 通常采用多进程或多线程的方式处理并发请求,而 Application Server 更专注于处理业务逻辑,可以与 HTTP Server 配合以实现并发处理。
  4. 典型架构:
    • 两层架构: 在简单的应用中,HTTP Server 和 Application Server 可能合并在一起,由同一个服务器处理静态和动态内容。
    • 三层架构: 在更复杂的应用中,通常采用三层架构,其中 HTTP Server 负责静态资源和请求的初始处理,然后将动态请求转发给独立的 Application Server 进程。
      总的来说,HTTP Server 和 Application Server 是在 web 应用架构中各司其职的组件,通过协同工作,能够实现对静态和动态内容的有效处理,提供更全面的 web 服务。

3.2. 静态资源和动态资源的区别

静态资源和动态资源是在 web 开发中经常遇到的两种不同类型的内容,它们在处理和生成方式上有很大的区别。

  1. 静态资源:
    • 定义: 静态资源是指在服务器上保存的不会在请求过程中发生变化的文件,如 HTML、CSS、JavaScript、图片、字体等。
    • 生成: 这些文件在服务器上事先存在,并且在客户端请求时直接发送给客户端,不需要在服务器端进行额外的处理。
    • 特点: 静态资源不包含动态生成的内容,它们的内容在请求前已经确定,因此处理速度快,适合用于不经常变化的页面元素和文件。
  2. 动态资源:
    • 定义: 动态资源是指在服务器端在每次请求时动态生成的内容,通常涉及到服务器端的业务逻辑、数据库查询等操作。
    • 生成: 这类资源的内容不是事先准备好的文件,而是在服务器端根据请求的参数、用户信息等动态生成的。
    • 特点: 动态资源可以根据用户的请求动态地生成内容,适用于需要根据用户输入或其他条件生成不同内容的场景。
  3. 区别:
    • 存储方式: 静态资源事先存储在服务器上,而动态资源是在每次请求时生成的。
    • 处理速度: 静态资源处理速度较快,因为它们不需要在请求时进行额外的处理;动态资源的处理速度可能较慢,因为它们需要服务器端执行一些业务逻辑来生成内容。
    • 适用场景: 静态资源适用于不经常变化的内容,如页面的布局和样式;动态资源适用于需要根据用户请求或其他条件动态生成内容的情况,如个性化的用户数据、动态页面等。
      在实际的 web 应用中,通常会结合使用静态资源和动态资源,以达到更好的性能和用户体验。例如,静态资源用于提供页面的基本结构和样式,而动态资源用于根据用户的操作生成个性化的内容。

4. Nginx Proxy 配置

Nginx代理模块ngx_http_proxy_module
环境:两台nginx服务器,安装方式可以一样也可以不一样,自己实验时建议一样

4.1. 配置源站服务器

//nginx-1 ip:192.168.17.129
//自定义nginx访问的欢迎页面(yum安装的nginx)
[root@localhost ~]# cd /usr/share/nginx/html/
[root@localhost html]# cp index.html{,.bak}
[root@localhost html]# echo >  index.html
[root@localhost html]# vim index.html
<!DOCTYPE html>
<html>
<head>
<title>欢迎来到我的网站</title>
<style>
/* 在这里添加您的CSS样式 */
</style>
</head>
<body>
<header>
<h1>欢迎来到我的网站</h1>
<nav>
<ul>
<li><a href="#">主页</a></li>
<li><a href="#">关于</a></li>
<li><a href="#">联系方式</a></li>
</ul>
</nav>
</header>
<main>
<p>在这里添加您的主要内容...</p>
</main>
<footer>
<p>版权所有 © 2023 My Website</p>
</footer>
</body>
</html>//修改nginx默认的nginx子配置文件,添加一行字符集配置(主要是为了访问时不会发生乱码的问题,如果不加,页面中有中文字体,会出现乱码的现象)
[root@localhost html]# vim  /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;
    charset utf-8;      #这一行是新增的,设置字符集为utf-8万国码
​
    #access_log  /var/log/nginx/host.access.log  main;
​
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
[root@localhost html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost html]# systemctl restart nginx

访问nginx,保证源站(后端服务器)自己访问没问题

4.2. 配置 Nginx 反向代理服务器

//nginx-2 ip:192.168.17.128
//配置nginx的yum源直接yum安装
//启动
//编辑nginx的配置文件:
[root@localhost ~]# cd /etc/nginx/conf.d/
[root@localhost conf.d]# ls
default.conf
[root@localhost conf.d]# cp default.conf  proxy.conf
//将文件中所有注释的行删除
[root@localhost conf.d]# sed -ri '/^.*#/d' proxy.conf
[root@localhost conf.d]# vim proxy.conf
server {
    listen       80;
    server_name  www.testabc.com;
    access_log  /var/log/nginx/proxy_access.log  main;
    location / {
    proxy_pass http://192.168.17.129:80;
    proxy_redirect default;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }}//重启nginx
[root@localhost conf.d]# systemctl restart nginx
​
//修改本地解析hosts解析
win + r
输入地址:C:\Windows\System32\drivers\etc\hosts
在最底下添加一行:
192.168.17.128  www.testabc.com

​使用浏览器访问域名
注意:如果开了VPN的一定要将它关掉,不然浏览器访问不到的!
访问正常!反向代理成功!

4.3. Nginx proxy 具体配置详解

proxy_pass;:转发到真实后端服务器的地址,可以是ip,也可以是域名和url地址
proxy_redirect;:如果真实服务器使用的是的真实IP:非默认端口。则改成IP:默认端口
proxy_set_header;:重新定义或者添加发往后端服务器的请求头
proxy_set_header Host $http_host;:重新定义发往后端服务器的请求
proxy_set_header X-Real-IP $remote_addr;:只记录连接服务器的上一个ip地址信息。(在后端服务器中记录客户端访问时真实的ip地址)

proxy_set_header X-Real-IP $remote_addr;
这个配置指令的作用是在将请求转发到上游服务器时,重新定义或添加一个名为 X-Real-IP 的请求头,并将其值设置为客户端的真实IP地址。
在一些情况下,Nginx 作为反向代理服务器,会将客户端的请求转发给上游服务器。但是,上游服务器可能只能获取到 Nginx 服务器的 IP 地址,而无法获取到客户端的真实 IP 地址。通过使用 proxy_set_header 指令,可以将客户端的真实 IP 地址传递给上游服务器,以便服务器能够获取到客户端的真实 IP 信息。
具体来说,$remote_addr 是 Nginx 内置变量,它表示客户端的 IP 地址。通过将 $remote_addr 的值赋给 X-Real-IP 请求头,上游服务器就能够读取到这个请求头,并获取到客户端的真实 IP 地址。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; :通过这个选项可以记录真正客户端机器的ip地址

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 这个配置指令的作用是在将请求转发到上游服务器时,重新定义或添加一个名为 X-Forwarded-For 的请求头,并将其值设置为客户端的真实 IP 地址。
在一些代理场景下,Nginx 作为反向代理服务器,会将客户端的请求转发给上游服务器。然而,上游服务器可能需要知道请求经过的【所有代理服务器】的 IP 地址,而不仅仅是 Nginx 服务器的 IP 地址。
X-Forwarded-For 请求头是一种常用的标准请求头,用于记录请求经过的代理服务器的 IP 地址。通过使用 proxy_set_header 指令,可以将客户端的真实 IP 地址添加到 X-Forwarded-For 请求头中,并将其传递给上游服务器。
$proxy_add_x_forwarded_for 是 Nginx 内置变量,它用于获取请求头中已经存在的 X-Forwarded-For 的值,并将客户端的真实 IP 地址追加到该值的末尾,以形成一个包含所有代理服务器 IP 地址的列表。
#这样做的好处是,上游服务器可以通过读取 X-Forwarded-For 请求头,获取到请求经过的所有代理服务器的 IP 地址列表,从而了解请求的真实来源路径。这对于一些安全性、日志记录和统计分析等方面都非常有用。

proxy_connect_timeout;:后端服务器连接的超时时间发起三次握手等候响应超时时间
proxy_send_timeout;:设置代理服务器向后端服务器发送数据的超时时间,单位为秒。
proxy_read_timeout:设置代理服务器从后端服务器读取数据的超时时间,单位为秒。文章来源地址https://www.toymoban.com/news/detail-809668.html

  • 注意:proxy_pass http:// 填写nginx-1服务器的地址。
    • 使用PC客户端访问nginx-2服务器地址
    • 浏览器中输入http://www.testabc.com/
    • 成功访问nginx-1服务器页面
//观察nginx-1服务器的日志
[root@localhost conf.d]# tailf /var/log/nginx/proxy_access.log 
192.168.17.1 - - [26/Jul/2023:11:06:49 +0800] "GET / HTTP/1.1" 200 451 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0" "-"
192.168.17.1 - - [26/Jul/2023:11:06:49 +0800] "GET / HTTP/1.1" 200 451 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0" "-"
192.168.17.1 - - [26/Jul/2023:11:06:49 +0800] "GET /favicon.ico HTTP/1.1" 404 153 "http://www.testabc.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0" "-"

到了这里,关于Nginx Proxy反向代理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx配置中proxy_pass反向代理502的bug

    记录一个坑人的bug, 我今天在一台新的liunx上运行nginx来进行反向代理时候,发现怎么测都是502 我把配置全部删了从头开始配置,发现80端口正常,80端口index.html正常,反向代理转向http://127.0.0.1/也正常, 但就是proxy_pass转向其他端口,比如说http://127.0.0.1:3000/时候,会出现50

    2024年02月05日
    浏览(44)
  • Nginx使用proxy_cache指令设置反向代理缓存静态资源

    CentOS7中解压tar包的方式安装Nginx: CentOS7中解压tar包的方式安装Nginx_centos7 tar文件 怎么load_霸道流氓气质的博客-CSDN博客 参考上面流程实现搭建Nginx的基础上,实现静态资源的缓存设置。 注意上面安装时的目录是在/opt/nginx目录下,这里是在/usr/local/nginx目录下。 nginx作为一款高

    2024年02月14日
    浏览(47)
  • Centos配置web proxy(nginx 代理)

    Web proxy 安装Nginx组件 配置文件名为proxy.conf,放置在/etc/nginx/conf.d/目录下 为www.chinaskills.cn配置代理前端,通过HTTPS的访问后端Web服务器 后端服务器日志内容需要记录真实客户端的IP地址  缓存后端Web服务器上的静态页面 创建服务监控脚本:/shells/chkWeb.sh 编写脚本监控公司的网

    2024年01月16日
    浏览(57)
  • 大数据云计算运维之Nginx反向代理与负载均衡

    一、Nginx概述 1.1 概述 Nginx(“engine x”)是一个高性能的 HTTP /反向代理的服务器及电子邮件(IMAP/POP3)代理服务器。 官方测试nginx能够支撑5万并发,并且cpu,内存等资源消耗却非常低,运行非常稳定。最重要的是开源,免费,可商用的。 Nginx还支持热部署,几乎可以做到7 *

    2024年02月11日
    浏览(58)
  • vue项目跨域问题(图片跨域)devServer.proxy代理失效时,nginx反向代理解决跨域问题

    ​ 本篇文章主要记录个人在公司项目开发中所遇问题,主要内容:在vue项目的开发中图片所存的服务器/端口号和项目所在的服务器/端口号不同,出现了跨域问题的保错。 ​ 如果文章有歧义,请各位大佬指出,避免误导更多的人!! Bug起因 ​ 在vue项目的开发中图片所存的

    2024年02月15日
    浏览(46)
  • Nginx HTTP和反向代理服务器

    1、概念: Nginx  (engine x) 是一个高性能的HTTP和反向代理web服务器。 2、什么是代理服务器: 概念: 代理服务器是介于客户端和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页信息,而是通过向代理服务器发送请求,信号会先送到代理服务

    2024年02月04日
    浏览(52)
  • nginx-反向代理是设置传输协议http/https

            X-Forwarded-Proto (XFP) 是一个事实上的标准首部,用来确定客户端与代理服务器或者负载均衡服务器之间的连接所采用的传输协议(HTTP 或 HTTPS)。在服务器的访问日志中记录的是负载均衡服务器与服务器之间的连接所使用的传输协议,而非客户端与负载均衡服务器

    2024年02月14日
    浏览(52)
  • Centos7笔记09之nginx反向代理grafana

    使用nginx反向代理访问grafana服务 本例测试用的域名(假的):                  x179.com 本例原本能正常访问的grafana地址:   192.168.10.90:3000 准备用nginx反代grafana后的地址:      http://x179.com/grafana/ 1、修改配置 ● 修改 [server] 区域    ○ 修改 ;domain = localhost  改为 domain

    2024年01月25日
    浏览(55)
  • nginx 开启https时反向代理http服务的问题

    当我们用nginx开启https时,反向代理一个本地的http服务,会遭遇跨域问题,报错 strict-origin-when-cross-origin ,导致很多资源无法加载。 这时只要在反向代理部分的配置文件中加入这一条语句即可:

    2024年02月14日
    浏览(43)
  • 基于centos7.9通过nginx实现负载均衡以及反向代理

    摘要:负载均衡: 负载均衡是一种技术,用于在多个服务器之间分发传入的网络流量,以平衡服务器的负载,提高系统的可用性和性能。当您有多台服务器时,您可以使用负载均衡将请求分发到这些服务器上,从而防止单个服务器过载而影响用户体验。 反向代理: 反向代理

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包