阅读 1104

Spring gateway / nginx / https正向代理

前言

  • 两台机器192.168.1.121,192.168.1.122
  • keepalived (vip 192.168.12.19)
  • 目标:
    • 两台主机上都安装gateway nginx keepalived
    • 192.168.12.19:8280 作为nginx到gateway的反向代理路径
    • 192.168.12.19:8290 作为nginx对外正向代理

涉及

  • dnsmasq
  • keepalived
  • nginx

基本概念

正向代理:局域网中的客户端不能直接访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。Nginx本身只支持http的正向代理,并通过ngx_http_proxy_connect_module模块支持http、https的正向代理;

反向代理:如果局域网向Internet提供资源服务,让Internet上的其他客户端来访问局域网内不的资源,使它们必须通过一个代理服务器来进行访问内部资源,这种服务就称为反向代理;Nginx通过proxy模块实现反向代理功能。

正向代理配置

作为 web_server Nginx 当然是可以处理 ssl 的,但作为proxy则是不行的。因为nginx不支持CONNECT,收到“CONNECT /:443 HTTP/1.1”后会报一个包含“client sent invalid request while reading client request line,” 的错误。因为 CONNECT 是正向代理的特性。

如何让nginx的正向代理,既支持http又支持https的代理访问呢?

需要安装模块:ngx_http_proxy_connect_module

# 1.nginx 安装源文件路径(/usr/soft/nginx)
> cd nginx
# 2.配置模块路径
> ./configure --add-module=/path/to/ngx_http_proxy_connect_module
# 3.指定对应版本的补丁
> patch -p1 < /模块的路径/ngx_http_proxy_connect_module/patch/proxy_connect.patch
> make && make install
复制代码
配置正向代理
server {
     listen                         3128;

     # dns resolver used by forward proxying
     # 域名解析服务器,必须有,因为证书都是通过域名颁发
     resolver                       8.8.8.8;

     # forward proxy for CONNECT request
     proxy_connect;
     # 允许端口,all所有
     proxy_connect_allow            443 563;
     proxy_connect_connect_timeout  10s;
     proxy_connect_read_timeout     10s;
     proxy_connect_send_timeout     10s;

     # forward proxy for non-CONNECT request
     location / {
         proxy_pass http://$host;
         proxy_set_header Host $host;
     }
 }
复制代码

由于在局域网环境无法访问外部的域名解析,所以必须搭建我们内部的域名解析服务器,上面配置的解析器可以指向我们的端口。

当配置了以上信息后还是报504 则有可能是还需要走ipv6的解析,此处可以关闭,如: resolver 本地dns服务ip ipv6=off;

参考

github.com/chobits/ngx…

文章分类
阅读
文章标签