由于最近要给学院的13级孩子挂训练赛,为了防止上网查资料找代码,我学着tiankonguse学长之前给我们挂比赛训练的方法,采用反向代理,局域网内只允许访问我允许的网站。
反向代理就是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
如果我的服务器代理了某个网址,那么对于用户来说,我的服务器就相当于是那个网址了。
示意图如下:
反向代理在网络安全上也蛮有作用的,能有效保护实际服务器。
我用的是nginx服务器进行反向代理的,用的是tiankonguse上传在github上的nginx的文件,配置文件已经写好了是方便ACM管理员的。然而在我使用的过程中,遇到了一些问题,大概问题是缺了log和temp文件夹,自己加上就可以了,dos下启动nginx,然后会有错误提示,缺啥补啥。
一些命令如下:
测试conf
nginx.exe -t 测试配置文件nginx.conf是否生效。
启动 nginx
在命令行里,进入到 nginx.exe 的目录下,然后执行 start nginx 即可启动 nginx 程序了。
也可以直接双击exe文件,然后cmd会一闪而过,这时nginx就启动了。
停止 nginx
输入命令 nginx -s stop 即可停止 nginx
退出 nginx
输入命令 nginx -s quit 即可退出 nginx
重启 nginx
输入命令 nginx -s reload 即可重新加载 nginx
注意nginx默认80端口,所以需要实现关闭IIS服务器,或者把配置文件改为其他端口,比如8080端口。
不能超过1024个连接。
这是官方文档:http://nginx.org/en/docs/windows.html
但是用了tiankonguse的配置文件,在我的电脑上仍然不能访问指定的网站,于是让学长远程我的电脑,帮我查错,写了一个新的conf,代码如下:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#gzip on;
server {
listen 8080;
server_name 127.0.0.1;
location / {
root html;
index index.html index.htm;
}
#access_log logs/host.access.log main;
location ~ \.zip$ {
root http://127.0.0.1;
}
#location ~ \.[^z].$ {
# proxy_pass http://acm.hdu.edu.cn;
#}
location ~ \.[^z] {
proxy_pass http://acm.hust.edu.cn;
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
}
改完之后,就能代理acm.hust.edu.cn了,重启nginx之后,把acm.hust.edu.cn改成自己的ip地址,然后后面跟上对应的子URL,就能访问对应的页面了。
这样,反向代理就成功了。
接下来的工作,就是让训练队员连接无线路由器,然后我的电脑作为反向代理服务器连接外网和无线路由器,示意图如下:
关掉自己电脑的防火墙,然后让用户访问无线路由器的IP地址,就能访问被代理的网站了,而且不能访问其他网站。比如101的无线路由器的IP地址:192.168.1.12