首页 > Linux > nginx无证书stream模块反向代理https
2019
09-16

nginx无证书stream模块反向代理https

公司研发一般在内网环境下,但是开发时需要调用某些第三方接口。

这时可以用一台服务器做nginx反向代理,然后研发机器修改host文件将域名指向服务器即可实现代理转发。

但是普通的nginx http反向代理代理https时需要配置证书,我们不可能有第三方接口域名的证书,所以要使用nginx 的stream模块。

普通的nginx反向代理时第七层代理,而stream模块是第四层代理,转发的tcp/ip协议,所以不需要证书。

stream模块要nginx 1.9.0后才开始支持,目前nginx-1.17.3默认已经包含此模块。

但是要实现代理多个接口,需要先解包,分析tcp包中的域名等信息,才能分发请求,所以还要用到ngx_stream_ssl_preread_module模块,这个模块官方的发布包里面没有包含,需要自行编译。

 

 

nginx无证书stream模块反向代理https - 第1张  | 技术人生-孙强

 

nginx 配置文件

 

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}

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;
    server {
        listen 80;
        server_name i.bosity.com;
        location / {
            proxy_pass http://i-bosity-com.oss-cn-hongkong.aliyuncs.com;
            #proxy_http_version 1.1;
            #proxy_set_header Upgrade $http_upgrade;
            #proxy_set_header Connection $connection_upgrade;
        }  
    }
    include /etc/nginx/conf.d/*.conf;
}

stream {
  log_format proxy '$proxy_protocol_addr $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 /usr/local/nginx/logs/access.log proxy;
  #error_log /usr/local/nginx/logs/error.log info;

  map_hash_bucket_size 64;
  
  map $ssl_preread_server_name $backend_pool {
    i.bosity.com server_cn;
    default server_baidu;
  }

  upstream server_cn{
    server i-bosity-com.oss-cn-hongkong.aliyuncs.com:443;
  }
  
  upstream server_baidu{
    server 127.0.0.1:443;
  }
  
  server{
    listen 443;
    ssl_preread on;
    proxy_pass $backend_pool;
    proxy_connect_timeout 15s;
    proxy_timeout 15s;
    proxy_next_upstream_timeout 15s;
  }
}
最后编辑:
作者:sunny5156
喜欢技术....

留下一个回复