Nginx反向代理

968 阅读2分钟

概述

  • Nginx (engine x) 是一个高性能的HTTP反向代理web服务器 [13],同时也提供了IMAP/POP3/SMTP服务。

代理

正向代理

  • 代理的目标为客户端,客户端请求代理主机,代理主机主动请求目标服务器,目标服务器会认为是代理主机在向它发送请求,将资源响应给代理主机,代理主机收到服务器的响应资源后,将资源转发给客户端;
  • 目的:对服务器隐藏客户端信息;

image.png

反向代理

  • 代理目标为服务器,客户端请求代理主机,由代理主机根据负载策略决定将该请求发送给哪台服务器处理,服务器处理请求后,将响应资源发送给代理主机,代理主机收到响应资源后,将资源转发给客户端。

  • 目的:可以对客户端隐藏具体服务器信息,可以实现服务器负载均衡效果。

  • 常见负载策略:

    • 最少连接策略:将请求发送给目前连接最少的服务器处理;
    • IP哈希策略:根据客户端的IP地址将请求发送给服务器处理,同一个客户端的请求会发送给同一台服务器处理;
    • 加权轮询策略:根据服务器权重决定将请求发送给哪台服务器处理;

image-20240327151906929

Nginx反向代理实现

image-20240327160033982

准备安装包

image-20240327153917912

  • 将Nginx解压到指定盘符

image-20240327153942128

配置Nginx实现反向代理

  • 配置conf/nginx.conf
http{
    upstream tomcatlist{
    server 服务器A的IP:端口;
    server 服务器B的IP:端口;
    }
  server {
    location / {
    proxy_pass http://tomcatlist/项目名称/;
    }
    location /项目名称/{
    proxy_pass http://tomcatlist/项目名称/;
    }
  }
}

image.png

客户端输入URL请求代理主机

  1. http://代理主机IP/

image.png

HTTPS配置

下载OpenSSL

安装OpenSSL

  • 一路next,无特别选择

image-20240327162432528

利用OpenSSL生成密钥和证书

  • 生成密钥
  1. openssl genrsa -out "存储密钥数据的文件路径"

image.png

  • 根据密钥文件生成请求证书的csr文件
  1. openssl req -new -key "存储密钥数据的文件路径" -out "存储csr数据的文件路径"

image.png

  • 根据密钥文件和csr生成证书文件
  1. openssl x509 -req -days 证书过期时间 -in "存储csr数据的文件路径" -signkey "存储密钥数据的文件路径" -out "存储证书数据的文件路径"

image.png

  • 查看生成文件

image-20240327163527603

配置Nginx

  • 配置conf/nginx.conf文件,添加以下代码;
    http{
      server {
      listen 443 ssl;
          server_name localhost;
          ssl_certificate 存储证书数据的文件路径;
          ssl_certificate_key 存储密钥数据的文件路径;
          ssl_session_cache shared:SSL:1m;
          ssl_session_timeout 5m;
          ssl_ciphers HIGH:!aNULL:!MD5;
          ssl_prefer_server_ciphers on;
          
        location / {
          root html;
          index index.html index.htm;
          proxy_pass http://tomcatlist/项目名称/;
        }
        location /项目名称/{
            proxy_pass http://tomcatlist/项目名称/;
        }
    }
}

image.png

HTTP跳转HTTPS

  • 配置conf/nginx.conf文件;
http{
    server{
        listen 80;
        rewrite ^(.*)$ https://$host$1 permanent;
    }
}

image.png