Nginx反向代理


一、代理介绍

代理在网络中使用是比较常见的,比如我们说的最多的就是翻墙软件,比如ss、蓝灯等这些大家常用的软件,他们就是能改代理大家访问国内无法访问的一些国外网站,比如facebook、YouTube等网站。其原理也比较简单:

1.用户将请求发给 -> 代理服务器

2.代理服务器代用户去访问 -> 数据

3.代理服务器将数据发送 -> 用户

正常没有代理情况上网

反代1.png

代理服务器场景

反代2.png

代理服务器扮演的就是一个中间人的角色。

代理分为正向代理和反向代理两种类型:

正向代理:代理用户访问其他网站,比如ss,蓝灯。

反向代理:用来发布服务器,比如nginx

这里主要给大家介绍的是反向代理,使用反向代理发布公司的站点。(国家严厉打击私单乱建翻墙代理服务器)

二、应用场景

1)堡垒机:堡垒机承担所有的外部访问,保护后端服务器的安全

反代堡垒机.png

2)业务发布服务器:将多个服务器通过虚拟主机的方式发布到公网

反代发布服务器.png

3)缓存服务器:CDN加速 反代缓存服务器.png

三、反向代理原理

1) 客户端通过浏览器发起请求 -> 代理服务器

2) 代理服务器接受请求

3) 代理服务器发起请求 -> 业务服务器

4) 业务服务器接受请求

5) 业务服务器处理请求

6) 业务服务器响应请求 -> 代理服务器

7) 代理服务器响应请求 -> 客户端

8) 客户端通过浏览器渲染请求并展示给用户

四、反向代理实现

proxy_pass: nginx反向代理指令

反向代理实现

location / {
    index index.php index.html index.htm; #定义首页索引文件的名称
    proxy_pass http://192.168.8.100;      # 请求转向后台服务器 
    # proxy_pass http://mysvr ;  #请求转向mysvr 定义的服务器列表
}

反向代理优化

proxy_set_header Host $host;      # 修改请求头,添加Host字段
proxy_set_header X-Real-IP $remote_addr;   # 修改请求头,添加X-Real-IP字段
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   # 修改请求头,添加X-Forwarded-For字段
client_max_body_size 10m;        # 允许客户端请求的最大单文件字节数
client_body_buffer_size 128k;    # 缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90;        # nginx跟后端服务器连接超时时间\(代理连接超时\)
proxy_send_timeout 90;           # 后端服务器数据回传时间\(代理发送超时\)
proxy_read_timeout 90;           # 连接成功后,后端服务器响应时间\(代理接收超时\)
proxy_buffer_size 4k;            # 设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k;             # proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k;     # 高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;  # 设定缓存文件夹大小,大于这个值,将从upstream服务器传

Nginx反向代理配置详解及案例如下:

Nginx反向代理配置

1.反向代理概念

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。此时,代理服务器对外就表现为一个服务器。Nginx作为一款高性能的Web服务器和反向代理服务器,其反向代理功能允许将客户端的请求转发到后端服务器,并将后端服务器的响应返回给客户端。

反向代理是一种代理服务器的配置模式,它代表服务器向客户端提供服务。客户端发送请求到反向代理服务器,然后反向代理服务器将请求转发到后端的真实服务器上,并将响应返回给客户端。这种方式隐藏了后端服务器的真实IP地址,增加了系统的安全性。

2.Nginx反向代理配置步骤

(1)编辑Nginx配置文件:

Nginx的主要配置文件是nginx.conf,通常位于Nginx安装目录下的conf文件夹中。编辑该文件以配置反向代理功能。

全局配置:设置worker进程数、错误日志等。

http配置:设置HTTP服务器相关的参数,如mime类型、sendfile等。

server配置:定义监听端口、域名、反向代理规则等。

(2)配置反向代理:

在server配置中,使用location指令来匹配请求的URI,并通过proxy_pass指令指定后端服务器的地址和端口。还可以设置proxy_set_header等指令来修改或添加HTTP头部,以便后端服务器能够正确识别请求。

(3)保存并测试配置:

保存nginx.conf文件后,需要重启Nginx以使配置生效。可以使用nginx -t命令来测试配置文件的语法是否正确,然后使用nginx -s reload命令来平滑重启Nginx。

(4)验证配置:

在浏览器中访问配置的域名或IP地址,检查是否能够正常访问到后端服务器的资源,以验证反向代理配置是否成功。

Nginx反向代理配置案例

以下是一个简单的Nginx反向代理配置案例:

假设有一个Web应用部署在两台服务器上,地址分别为192.168.8.100和192.168.8.101,端口均为8080。现在希望通过Nginx来实现负载均衡,将请求平均分配到这两台服务器上。 配置文件示例(nginx.conf)

http {
    # 定义后端服务器组
    upstream myapp {
        server 192.168.8.100:8080;
        server 192.168.8.101:8080;

        # 可选配置:负载均衡策略,如轮询(默认)、最少连接等
        # least_conn;
    }

    server {
        listen 80;
        server_name myapp.example.com;

        location / {
            # 将请求转发到后端服务器组
            proxy_pass http://myapp;

            # 保留原始Host头
            proxy_set_header Host $host;

            # 传递真实客户端IP
            proxy_set_header X-Real-IP $remote_addr;

            # 传递经过代理链的客户端IP列表
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 传递请求协议(http/https)
            proxy_set_header X-Forwarded-Proto $scheme;

            # 其他可选配置,如缓存、超时、重试等
        }

        # 其他location配置...
    }

    # 其他server配置...
}

说明

upstream:定义了一个名为myapp的后端服务器组,包含了两个后端服务器的地址和端口。

server:定义了一个监听80端口的HTTP服务器,绑定了域名myapp.example.com。

location:匹配所有以根路径("/")开头的请求,并将它们转发到myapp后端服务器组。同时设置了几个常用的proxy_set_header指令来传递请求信息给后端服务器。

通过以上配置,Nginx就可以作为反向代理服务器,将来自客户端的请求平均分配到两台后端服务器上,实现负载均衡功能。