Nginx反向代理概述

正向代理与反向代理概述

正向代理:
定义:正向代理位于客户端和目标服务器之间,客户端的请求首先发送到代理服务器,然后由代理服务器转发到目标服务器,最后将目标服务器的响应返回给客户端。
作用:正向代理可以隐藏客户端的真实IP地址,同时可以进行一些安全控制,如访问控制、内容过滤等。

反向代理:
定义:反向代理位于服务器端,客户端的请求直接发送到反向代理服务器,然后由反向代理服务器根据配置将请求转发到后端的一个或多个服务器上,最后将后端服务器的响应返回给客户端。
作用:反向代理可以负载均衡、提高安全性、缓存静态内容等。

Nginx反向代理的配置语法

Nginx 的反向代理功能是通过 ngx_http_proxy_module 模块实现的。这个模块在安装 Nginx 的时候默认就已经包含在内了。以下是一些在配置 Nginx 反向代理时常用的指令及其说明。

proxy_pass
语法proxy_pass URL
默认值无默认值
位置location块
说明将请求转发到指定的URL

该指令用来设置被代理服务器地址,可以是主机名称、IP地址加端口号形式。
URL:为要设置的被代理服务器地址,包含传输协议(http,https://)、主机名称或IP地址加端口号、URI等要素。
例子:访问192.168.101.23后将服务跳转到192.168.101.18

192.168.101.23nginx配置

proxy_server
    server {
        listen 8082;
        server_name localhost;
        location / {
                proxy_pass http://192.168.101.18;
        }
    }

在 192.168.101.18的index.html添加标识
在这里插入图片描述
浏览器访问测试
在这里插入图片描述

斜杠的问题

如果不加斜杠访问会提示错误
演示:

proxy_server
    server {
        listen 8082;
        server_name localhost;
        location server {
                proxy_pass http://192.168.101.18;
        }
    }

路径不能正常访问
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1030439e6d8e4abeb5618ca0bd0cba17.png

查看错误提示对应路径中没有这个文件,因为server被加到路径中去了,但是服务器并没有这个路径
在这里插入图片描述

加上斜杠则能正常访问

proxy_server
    server {
        listen 8082;
        server_name localhost;
        location /server {
                proxy_pass http://192.168.101.18/;
        }
    }

在这里插入图片描述
区别在于 如果不加斜杠则会把server拼接到访问路径中去,如果加上则不会.
如果location只有一个"/"则加不加都一样

proxy_set_header

语法proxy_set_header field value
默认值proxy_set_header Host $proxy_host; proxy_set_header Connection close;
位置http, server, location

该指令可以更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给代理的服务器

需要注意的是,如果想要看到结果,必须在被代理的服务器上来获取添加的头信息。
被代理服务器: [192.168.101.18]

server {
        listen 83;
        server_name 127.0.0.1;
        access_log logs/access.log  main;
        default_type text/plain;
        location / {
                return 200 $http_username; #获取头信息
        }

    }

代理服务器: [192.168.101.23]

server {
        listen  8082;
        server_name localhost;
        location /server {
                proxy_pass http://182.168.101.18:83/;
                proxy_set_header username JACK; #设置头信息
        }
    }

输出
在这里插入图片描述

代理服务器 192.168.101.23
设置多个值

server {
        listen 8082;
        server_name localhost;
        location / {
                proxy_pass http://192.168.101.18/;
        }

        location /server {
                proxy_pass http://192.168.101.18:83/;
                proxy_set_header username JACK;
                proxy_set_header host $host;

        }
    }

被代理服务器 [192.168.101.18]

 server {
        listen 83;
        server_name 127.0.0.1;
        access_log logs/access.log  main;
        default_type text/plain;
        location / {
                return 200 $http_username=$http_host';
        }

    }

在这里插入图片描述

proxy_redirect

proxy_redirect 是 Nginx 服务器中用于处理代理请求重定向的指令。
在反向代理配置中,proxy_redirect 指令用于修改目标服务器返回的重定向响应中的Location头部信息。这样可以确保客户端在接收到重定向响应时,能够访问正确的URL。

语法proxy_redirect error_code http_status
默认值proxy_redirect default;
位置http, server, location
用途重定向响应的URL和状态码

服务端[192.168.101.18]

server {
        listen 85;
        server_name 127.0.0.1;
        location / {
                root html;
                index index.html;
        }

    }

代理服务端[192.168.101.23] 代理192.168.101.18

server {
        listen 8083;
        server_name 127.0.0.1;
        location / {
                proxy_pass http://192.168.101.18:85/; 
                proxy_redirect http://192.168.101.18/  http://192.168.101.23:8080/;
        }
    }

配置语法:proxy_redirect [redirect replacement];

  • redirect:目标,Location的值
  • replacement:要替换的值

proxy_redirect default;

  • default;
  • 将location块的uri变量作为replacement,
  • 将proxy_pass变量作为redirect进行替换

请求处理流程
假设有一个客户端请求的流程:

客户端请求:

客户端向 http://example.com:8083/ 发起请求。
Nginx 接收到请求:

Nginx 在端口 8083 上监听到了这个请求,并根据 server_name 和 location / 的配置进行处理。
请求代理:

根据 proxy_pass 指令,Nginx 将这个请求转发(代理)到 http://192.168.101.18:85/

后端服务器响应:
假设后端服务器 192.168.101.18:85 返回一个重定向响应,响应头包含 Location: http://192.168.101.18/some/path。

Nginx 修改重定向响应:
根据 proxy_redirect 指令,Nginx 将 Location 头从 http://192.168.101.18/some/path 修改为 http://192.168.101.23:8080/some/path。

客户端接收到响应:
客户端收到 Nginx 修改后的重定向响应,并访问 http://192.168.101.23:8080/some/path,而不是直接访问 http://192.168.101.18/some/path。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值