本文介绍如何使用Nginx的流(stream)模块对指定网站进行反向代理。
关键词:Nginx,反向代理
Nginx的stream模块可以通过SNI(服务器名称指示)进行识别,可以设置根据不同的SNI名访问不同的upstream(上游)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| user root; worker_processes auto; error_log /var/log/nginx/error.log;
include /usr/share/nginx/modules/*.conf;
events { use epoll; multi_accept on; accept_mutex on; worker_connections 65535; }
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 /var/log/nginx/tcp-access.log proxy; open_log_file_cache off; map $ssl_preread_server_name $stream_map { default others; cloudflare.com cloudflare; ocsp.pki.goog google; } upstream cloudflare { server cloudflare.com:443; } upstream google { server ocsp.pki.goog:443; } upstream others { server unix:/dev/shm/nginx.sock; } server { listen 443 reuseport; proxy_pass $stream_map; ssl_preread on; } }
|
上图代码中,cloudflare作为配置名,对应cloudflare.com:443的流量上游;
google作为配置名,对应google.com:443的流量上游。
定义一个others配置,对应其余的SNI,也就是默认配置。