Nginx 代理与 Proxy 插件整合的最佳实践

推荐一个AI网站,免费使用豆包AI模型,快去白嫖👉海鲸AI

写在前面

本文将介绍 Nginx 的正向代理配置以及如何与 Proxy 插件进行整合。正向代理是一种代理服务器,它代表客户端向目标服务器发送请求,并将响应返回给客户端。Proxy 插件可以增强 Nginx 的代理功能,提供更多的特性和灵活性。

一、概述

正向代理是一种网络代理技术,它允许客户端通过代理服务器访问目标服务器。在正向代理中,客户端与代理服务器建立连接,并将请求发送给代理服务器。代理服务器接收到请求后,代表客户端向目标服务器发送请求,并将目标服务器的响应返回给客户端。

Proxy 插件是 Nginx 的一个扩展模块,它提供了更多的代理功能和特性。通过整合 Proxy 插件,Nginx 可以支持更多的协议和功能,例如 HTTP/HTTPS、FTP、SMTP 等。

二、正向代理配置

2.1、配置

以下是一个基本的 Nginx 正向代理配置示例:

nginx 复制代码
server {
    listen       80;
    server_name  proxy.example.com;

    location / {
        proxy_pass http://target.example.com/;
    }
}

在上述配置中,我们创建了一个名为 proxy.example.com 的虚拟服务器,并监听 80 端口。location / 块指定了所有请求都将被代理到 http://target.example.com/

2.2、验证

要验证正向代理是否正常工作,可以使用以下步骤:

  1. 在客户端的浏览器中输入 proxy.example.com
  2. 浏览器将向 Nginx 代理服务器发送请求。
  3. Nginx 代理服务器将请求转发到 target.example.com
  4. target.example.com 将响应返回给 Nginx 代理服务器。
  5. Nginx 代理服务器将响应返回给客户端的浏览器。

如果一切正常,你应该能够在浏览器中看到 target.example.com 的内容。

三、使用插件实现 HTTP/HTTPS 正向代理

要使用 Proxy 插件实现 HTTP/HTTPS 正向代理,你需要安装并配置相应的插件。以下是一个基本的示例:

  1. 安装 Proxy 插件。
  2. 在 Nginx 配置文件中添加以下内容:
nginx 复制代码
server {
    listen       80;
    server_name  proxy.example.com;

    location / {
        proxy_pass http://target.example.com/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location ~ /.well-known {
        root /var/www/html;
    }
}

在上述配置中,我们添加了 proxy_set_header 指令来设置请求头,以便目标服务器能够正确识别客户端的真实 IP 地址和主机名。

四、在 CentOS 7 上整合 Proxy 插件

4.1、环境准备

在 CentOS 7 上整合 Proxy 插件,你需要确保以下环境已经准备好:

  1. CentOS 7 系统。
  2. Nginx 已经安装。
  3. Proxy 插件已经安装。

4.2、配置 Nginx

在 CentOS 7 上配置 Nginx,你需要编辑 /etc/nginx/nginx.conf 文件,并添加以下内容:

nginx 复制代码
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

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

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

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

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location ~ /.well-known {
            root /var/www/html;
        }
    }
}

在上述配置中,我们创建了一个名为 backend 的上游服务器组,并指定了两个后端服务器 backend1.example.combackend2.example.com。然后,我们创建了一个名为 proxy.example.com 的虚拟服务器,并将请求代理到 backend 上游服务器组。

4.3、编译 Nginx

在 CentOS 7 上编译 Nginx,你需要执行以下步骤:

  1. 解压 Nginx 源代码包。
  2. 进入 Nginx 源代码目录。
  3. 执行 configure 命令,指定编译选项。
  4. 执行 make 命令,编译 Nginx。
  5. 执行 make install 命令,安装 Nginx。

4.4、测试

在 CentOS 7 上测试 Nginx,你需要执行以下步骤:

  1. 启动 Nginx 服务。
  2. 在客户端的浏览器中输入 proxy.example.com
  3. 浏览器将向 Nginx 代理服务器发送请求。
  4. Nginx 代理服务器将请求转发到 backend 上游服务器组。
  5. backend 上游服务器组将响应返回给 Nginx 代理服务器。
  6. Nginx 代理服务器将响应返回给客户端的浏览器。

如果一切正常,你应该能够在浏览器中看到后端服务器的内容。

五、在 Windows 上编译 Nginx 并整合 Proxy 插件

5.1、环境准备

在 Windows 上编译 Nginx 并整合 Proxy 插件,你需要确保以下环境已经准备好:

  1. Windows 系统。
  2. Nginx 已经安装。
  3. Proxy 插件已经安装。

5.2、配置 Nginx

在 Windows 上配置 Nginx,你需要编辑 nginx.conf 文件,并添加以下内容:

nginx 复制代码
http {
    include       mime.types;
    default_type  application/octet-stream;

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

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

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

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location ~ /.well-known {
            root html;
        }
    }
}

在上述配置中,我们创建了一个名为 backend 的上游服务器组,并指定了两个后端服务器 backend1.example.combackend2.example.com。然后,我们创建了一个名为 proxy.example.com 的虚拟服务器,并将请求代理到 backend 上游服务器组。

5.3、编译 Nginx

在 Windows 上编译 Nginx,你需要执行以下步骤:

  1. 解压 Nginx 源代码包。
  2. 进入 Nginx 源代码目录。
  3. 执行 configure 命令,指定编译选项。
  4. 执行 make 命令,编译 Nginx。
  5. 执行 make install 命令,安装 Nginx。

5.4、创建完整 Nginx

在 Windows 上创建完整 Nginx,你需要执行以下步骤:

  1. 复制 Nginx 可执行文件到一个新的目录。
  2. 复制 nginx.conf 文件到同一个目录。
  3. 复制所有的 Nginx 模块到同一个目录。
  4. 复制所有的 Nginx 依赖库到同一个目录。

5.5、测试

在 Windows 上测试 Nginx,你需要执行以下步骤:

  1. 启动 Nginx 服务。
  2. 在客户端的浏览器中输入 proxy.example.com
  3. 浏览器将向 Nginx 代理服务器发送请求。
  4. Nginx 代理服务器将请求转发到 backend 上游服务器组。
  5. backend 上游服务器组将响应返回给 Nginx 代理服务器。
  6. Nginx 代理服务器将响应返回给客户端的浏览器。

如果一切正常,你应该能够在浏览器中看到后端服务器的内容。

六、整合 Proxy 插件并创建 Nginx Docker 镜像

6.1、编写 Dockerfile

在项目根目录下创建一个名为 Dockerfile 的文件,内容如下:

dockerfile 复制代码
FROM nginx:latest

RUN apt-get update && apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

WORKDIR /usr/src/nginx-1.21.6/

COPY conf /etc/nginx/conf.d/

RUN./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/usr/src/nginx-1.21.6/modules/nginx-auth-ldap-module-master --add-module=/usr/src/nginx-1.21.6/modules/ngx_http_proxy_connect_module-master

RUN make && make install

CMD ["nginx", "-g", "daemon off;"]

在这个文件中,我们使用了官方的 nginx:latest 镜像作为基础镜像。然后,我们更新了系统包,并安装了一些必要的依赖库。接着,我们将项目中的 conf 目录复制到 /etc/nginx/conf.d/ 目录下。然后,我们执行了 configure 命令来编译和安装 Nginx,并添加了一些模块。最后,我们设置了 Nginx 的启动命令。

6.2、构建镜像

在项目根目录下执行以下命令来构建 Docker 镜像:

docker build -t nginx-proxy:1.0.0.

在这个命令中,我们使用了 docker build 命令来构建 Docker 镜像。-t 选项用于指定镜像的名称和标签,nginx-proxy:1.0.0 是我们指定的镜像名称和标签。最后的 . 表示当前目录。

6.3、docker-compose.yml 配置

在项目根目录下创建一个名为 docker-compose.yml 的文件,内容如下:

yaml 复制代码
version: '3'

services:
  nginx-proxy:
    container_name: nginx-proxy
    image: nginx-proxy:1.0.0
    ports:
      - "80:80"

在这个文件中,我们定义了一个名为 nginx-proxy 的服务,它使用了我们刚刚构建的 nginx-proxy:1.0.0 镜像。然后,我们定义了一个名为 ports 的部分,将容器的 80 端口映射到主机的 80 端口。

6.4、测试

在项目根目录下执行以下命令来启动容器:

docker-compose up -d

在这个命令中,我们使用了 docker-compose up -d 命令来启动容器。-d 选项表示在后台运行容器。

6.5、镜像导入导出

在项目根目录下执行以下命令来导入镜像:

docker load -i nginx-proxy:1.0.0.tar

在这个命令中,我们使用了 docker load -i 命令来导入镜像。nginx-proxy:1.0.0.tar 是我们要导入的镜像文件。

在项目根目录下执行以下命令来导出镜像:

docker save -o nginx-proxy:1.0.0.tar nginx-proxy:1.0.0

在这个命令中,我们使用了 docker save -o 命令来导出镜像。nginx-proxy:1.0.0.tar 是我们要导出的镜像文件,nginx-proxy:1.0.0 是我们要导出的镜像名称和标签。

相关推荐
黑客老陈9 分钟前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
运维·服务器·前端·网络·安全·web3·xss
正小安14 分钟前
Vite系列课程 | 11. Vite 配置文件中 CSS 配置(Modules 模块化篇)
前端·vite
暴富的Tdy42 分钟前
【CryptoJS库AES加密】
前端·javascript·vue.js
neeef_se42 分钟前
Vue中使用a标签下载静态资源文件(比如excel、pdf等),纯前端操作
前端·vue.js·excel
m0_748235611 小时前
web 渗透学习指南——初学者防入狱篇
前端
z千鑫1 小时前
【前端】入门指南:Vue中使用Node.js进行数据库CRUD操作的详细步骤
前端·vue.js·node.js
m0_748250742 小时前
Web入门常用标签、属性、属性值
前端
m0_748230442 小时前
SSE(Server-Sent Events)返回n ,前端接收数据时被错误的截断【如何避免SSE消息中的换行符或回车符被解释为事件消息的结束】
前端
生产队队长3 小时前
项目练习:element-ui的valid表单验证功能用法
前端·vue.js·ui