nginx正向代理http/https和代理邮件服务

  • 需求背景:

    在公司内网环境,不能直接连接外网。需要内网服务通过正向代理访问到外网。


  • 安装环境准备:

         nginx本身是不支持https协议请求转发,为了让nginx能达到这一效果需要借助第三方模块ngx_http_proxy_connect_module。首先下载这一模块:https://github.com/chobits/ngx_http_proxy_connect_module

       安装介质版本:


      pcre-8.38.tar.gz

   nginx-1.12.2.tar.gz

   ngx_http_proxy_connect_module-master.zip


  • 安装过程

1.创建nginx账户

# groupadd -g 9996 nginx
# useradd -u 9996 -g 9996 nginx -s /sbin/nologin

2.解压缩

# cd /opt
# tar xf pcre-8.38.tar.gz
# tar xf nginx-1.12.2.tar.gz
# unzip ngx_http_proxy_connect_module-master.zip

3.安装依赖,如果未安装,则安装

# yum install-y gcc gcc-c++ openssl openssl-devel

4.安装pcre

# cd /opt/pcre-8.38
# ./configure --prefix=/usr/local/pcre
# make && make install

5.添加ngx_http_proxy_connect_module模块,切换到nginx解压包目录下

# cd /opt/nginx-1.12.2
# patch -p1 < /opt/ngx_http_proxy_connect_module-master/patch/proxy_connect.patch

6.编译安装nginx

# ./configure --prefix=/etc/nginx1.12.2 --with-http_ssl_module --with-pcre=/opt/pcre-8.38 --add-module=/opt/ngx_http_proxy_connect_module-master  --pid-path=/var/run/  --with-mail --with-stream
# make && make install

7.检查安装编译

# /etc/nginx1.12.2/sbin/nginx -V
nginx version: nginx/1.12.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx1.12.2 --with-http_ssl_module --with-pcre=/opt/pcre-8.38 --add-module=/opt/ngx_http_proxy_connect_module-master --pid-path=/var/run/ --with-mail --with-stream


  • http/https代理配置


server {
 
    resolver 114.114.114.114;  #DNS解析地址
    listen 10080;              #监听地址
    resolver_timeout 10s;      #超时时间
    proxy_connect;           #启用"连接"http方法支持
    proxy_connect_allow            443 563;  #代理可以连接的端口
    proxy_connect_connect_timeout  10s;      #代理连接超时time
    proxy_connect_read_timeout     10s;
    proxy_connect_send_timeout     10s;
    access_log  /weblogs/nginx/proxy.access.log;
    error_log   /weblogs/nginx /proxy.error.log;
 
    location / {
        proxy_pass $scheme://$http_host$request_uri;
        proxy_set_header Host $http_host;
 
        proxy_buffers 256 4k;
        proxy_max_temp_file_size 0;
 
        proxy_connect_timeout 30s;
        
        #allow 127.0.0.1;  #ip限制
        #deny all ;
             }
}
  • 邮件代理配置


1.在nginx.conf中最后添加stream段

stream{
 
    log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
 
      access_log /weblogs/nginx/nginx_proxy.log proxy ;
 
     include vhost/*.stream;
  }
      
备注:stream段的配置要与http段在同级目录,配置文件已.stream结尾

2.添加邮件代理配置

server {
        listen       25;
        proxy_pass smtp.sseinfo.com:25;
 
}
  • 客户端配置http/https

1.代理http/https配置

在/etc/profile添加以下内容

export http_proxy=10.10.11.193:9999
export https_proxy=10.10.11.193:9999
#source /etc/profile

2.测试命令(在客户端)

测试代理http
 
# curl -I http://www.baidu.com -v -x 10.10.11.93:10080
> Host: www.baidu.com
 
测试代理https
 
# curl -I https://www.baidu.com -v -x 10.10.11.93:10080
> Host:
  • 代理邮件

方法1:在客户端/etc/hosts添加解析
方法2:在对应的邮件配置中修改将邮件域名改为正向代理IP