由於最近要給學院的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