外网映射教程

如果您希望让外网访问UOJ,但是服务器没有外网ip,那么您可能需要这篇教程。
本文将引导您将内外的UOJ对外网开放。您可以选择以下方案中的一种。

ngrok

ngrok是一款操作简单的软件,可以把内网的web服务映射到外网。

大部分的ngrok服务是免费的。例如:ngrok.cc

ngrok的缺点:

  • 速度比较慢
  • 数据并不保密,ngrok服务提供者有能力监听OJ的通讯。

虽然有这几个缺点,ngrok仍然不失为一个好的选择。具体的配置,请参见ngrok.cc网站。

ssh转发

这个方案需要您有一台VPS,且VPS需要拥有外网ip。PYOJ就是通过这种方式向外网开放的。

首先,您需要在本地机器通过ssh-keygen来生成一个您的密钥:

ssh-keygen -t rsa

一直按enter键,然后您将会在~/.ssh/id_rsa.pub取得您的公钥。
生成公钥

然后登录您的VPS,把上面的公钥扔进~/.ssh/authorized_keys,如下图所示:
VPS

现在,您在本地机器上使用如下命令,应该可以免密码登录VPS:
bash ssh <VPS_user>@<VPS_ip>
如果不能登录,您可能对上面过程的理解存在偏差。

接下来,在本地机器上安装autossh,它是稳定的ssh连接工具:

sudo apt install autossh

最后运行下面的指令,将本地的80端口映射到VPS的80端口:

autossh -M 5698 -NfR <VPS的ip>:80:<本地机器的ip>:80 <VPS用户名>@<VPS的ip>  

# 例如:
# autossh -M 5698 -NfR 23.23.23.23:80:127.0.0.1:80 blue@23.23.23.23
# 5698是监听端口,用于测试ssh连接是否稳定。如果您运行了多个autossh,请保证它们的监听端口不同。

访问VPS的ip,您应该可以看到UOJ了。

如果您有域名,请添加一条A记录,指向VPS的ip,然后就能用域名访问了。

ssh转发的高级配置

如果一台VPS需要映射多个网站,那么显然不能都映射到80端口。

在这种情况下,您可以将网站分别映射到10000,10001,10002……然后用nginx来做反代。访问不同的域名将会反代到不同的网站。

VPS上的配置文件(/etc/nginx/conf.d/uoj.conf)大概如下:

http://paste.ubuntu.com/24334214/



[CC协议 BY-NC-SA] 署名 - 非商业性使用 - 相同方式共享 @ UOJ部署指北 2018
Home apps close