前言
利用nginx的sni反向代理,可以无需证书实现反代,当然sniproxy也可以实现这个功能,但是我配置的sniproxy时灵时不灵,所以我选择了nginx来实现这个功能。
安装nginx
安装nginx可以使用apt-get yum或者各种一键脚本,当然我这里记录一下一键脚本安装和编译安装两种不同的方式。
编译安装
安装相关依赖
apt-get install gcc make libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev -y
安装nginx
官网最新版:http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.14.0.tar.gz tar -zxvf nginx-1.14.0.tar.gz cd nginx-1.14.0 ./configure --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module make && make install
常用命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin //快捷方式 /usr/local/nginx/sbin/nginx //启动nginx /usr/local/nginx/sbin/nginx -s reload //重启nginx /usr/local/nginx/sbin/nginx -s stop //关闭nginx
也可以使用脚本来管理nginx,vi /etc/init.d/nginx
把一下内容复制进去
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
. /lib/lsb/init-functions
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/usr/local/nginx/logs/$NAME.pid --exec $DAEMON || true
sleep 1
start-stop-daemon --start --quiet --pidfile \
/usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
status)
status_of_proc -p /usr/local/nginx/logs/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
exit 1
;;
esac
exit 0
增加执行权限
sudo chmod +x /etc/init.d/nginx
现在管理 Nginx 只需使用以下命令即可:
sudo service nginx start|stop|restart|reload
如果要开机自动启动 Nginx,请执行以下命令:
sudo update-rc.d -f nginx defaults
一键脚本安装nginx
各种一键脚本很多,这里介绍一下用lnmp.org的一键脚本安装的办法。
当然这里只安装了nginx,没有完全安装lnmp环境,lnmp命令也是用不了的。
wget -c http://soft.vpser.net/lnmp/lnmp1.5beta.tar.gz && tar zxf lnmp1.5beta.tar.gz && cd lnmp1.5 sed -i 's/'"Nginx_Modules_Options=''"/"Nginx_Modules_Options='--with-stream_ssl_preread_module'"'/' lnmp.conf ./install.sh nginx
启动nginx
service nginx start
设置nginx
修改配置文件,vi /usr/local/nginx/conf/nginx.conf,添加以下内容到nginx.conf的顶部
stream {
server {
listen 443;
ssl_preread on;
resolver 8.8.8.8;
proxy_pass $ssl_preread_server_name:$server_port;
}
}
注意:这对所有解析到这个IP的域名都会进行转发,保护好你的服务器,注意监控带宽,否则你的流量会飞速流失。
重启nginx
service nginx restart
想使用这个代理,需要在本地设置hosts,C:\Windows\System32\drivers\etc\hosts添加以下内容
127.0.0.1 domian.com #服务器IP 欲反代的域名
或者自己搭建dns服务器(可以参考本博客的另外一篇文章:自建dns服务器)
参考链接:
https://zimiao.moe/Nginx-SNI-Proxy/
https://imququ.com/post/my-nginx-conf.html
https://www.cnblogs.com/project/p/6942593.html
