如何在家托管网站
您家里有台闲置的旧电脑或笔记本电脑吗?好消息!您可以把它变成一台网络服务器,将您的网站从家庭网络托管到全世界!如果您恰好有一台树莓派,那就更好了,因为树莓派运行安静,功耗极低。
不过,任何能运行Ubuntu或类似操作系统的电脑都可以胜任!
我们将讨论网络设置、防火墙、Apache、虚拟主机、动态IP问题等等。去给自己泡杯咖啡,开始在家搭建自己的Web服务器吧!
要求:
- 安装了Ubuntu / Ubuntu Server操作系统的 PC/笔记本电脑/树莓派
- 用于访问路由器设置的用户名和密码
我们将讨论以下内容:
我将使用安装了 Ubuntu 18.04 LTS 的 Raspberry Pi 3 来搭建 Web 服务器。从 Ubuntu 官网下载时,务必选择 LTS(长期支持)版本。如果您熟悉终端操作,也可以使用Ubuntu Server。撰写本文时,最新的 Ubuntu LTS 版本是 20.04,支持期至 2025 年 4 月。
端口转发
Ubuntu 系统启动并运行后,我建议做的第一件事就是在家庭网络上配置端口转发。这样做是为了能够通过互联网访问我们的 Web 服务器。您可以使用连接到家庭网络的任何计算机来完成此操作。
要访问路由器设置,您需要默认网关 IP 地址。要获取该地址,请使用命令提示符/终端,并根据您当前使用的操作系统输入以下三个命令之一。默认网关 IP 地址通常为 192.168.1.1 或类似地址。
ipconfig | findstr /i "Gateway" // Windows - Command Prompt
ip r | grep default // Ubuntu - Terminal
route get default | grep gateway // Mac OS
找到默认网关 IP 地址后,将其输入到您的网络浏览器中。您需要输入用户名和密码才能登录并访问路由器设置。这些凭据通常位于路由器底部,一般贴在一个小标签上。如果没有,您可以上网查找您路由器型号的默认凭据。
成功登录后,查找“端口转发”或“虚拟服务器设置”。不同的路由器对相同的设置可能有不同的命名。您需要添加两条新条目,以允许 SSH 流量通过 22 端口,Web 服务器流量通过 80 端口。
要正确实现这一点,你需要将要用作 Web 服务器的计算机的本地 IP 地址。我的计算机是运行 Ubuntu 系统的树莓派,所以要获取树莓派的本地 IP 地址,我只需打开终端并输入以下命令:
hostname -I
// 192.168.1.22
树莓派的本地 IP 地址与默认网关的 IP 地址类似,但肯定不同。我们需要将传入的请求指向本地服务器地址,这可以通过 22 和 80 端口来实现,这就是为什么我们需要本地服务器的 IP 地址。
所以,你需要在路由器设置中添加这两个端口,以允许流量通过它们到达你的本地服务器 IP 地址。添加端口 22 时,你可以将其命名为“SSH”,在“服务器 IP 地址”下输入你的本地服务器 IP 地址(在我的例子中是 192.168.1.22),在“外部/内部端口起始/结束”下输入“22”。使用 TCP 协议。对端口 80 执行相同的操作,并将其命名为“Apache”。
好了,现在路由器端的端口已经配置好了。请访问canyouseeme.org 网站,检查端口 22 和 80 是否已打开。页面上有两个输入框:“您的 IP 地址”,显示您的公网 IP 地址;以及“要检查的端口”。只需输入端口号 22 或 80,然后点击“检查端口”即可。
如果您收到“错误:我无法在您的 IP 地址和端口上找到您的服务”的提示,请不要担心,这完全正常。这是因为您服务器上的防火墙有效地阻止了所有未经授权的连接。我们稍后会详细讨论这个问题。
服务器和防火墙初始配置
在全新安装的 Ubuntu 系统上,最好进行一些基本的服务器配置,以便服务器为将来使用做好准备。要开始配置,请在服务器(我这里用的是 Raspberry Pi)上打开终端,然后按照步骤操作。
首先,我们将创建一个新用户,用于通过 SSH 协议登录服务器,无论是在家庭网络内部还是外部(本地和外部)。此外,我们将把这个新用户设置为“超级用户”,这意味着它将拥有 root 权限。
这样,新用户就可以通过在每条命令前加上“sudo”来以管理员权限运行命令。创建新用户时,您需要输入密码和一些基本用户信息。
sudo adduser john // create new user john
sudo usermod -aG sudo john // add user john to sudo group
我们的新 Ubuntu 用户现在应该已经创建好了,但在通过 SSH 登录之前,我们需要配置防火墙。我们需要允许端口 22 通过防火墙,这样我们才能使用新用户通过 SSH 在本地和外部登录。
sudo ufw status numbered // check current firewall status
sudo ufw allow OpenSSH // allow port 22 through firewall
sudo ufw enable // enable firewall
启用防火墙并允许端口 22 通过后,现在可以使用 SSH 连接到我们的服务器。您应该能够从连接到本地网络的任何计算机连接到服务器,而且如果您已正确配置端口转发,则应该能够从世界任何地方连接。
要连接到您的服务器,只需使用命令提示符或终端并输入以下命令:
ssh john@192.168.1.22 // local connection - use your local server IP
ssh john@xxx.xxx.xxx.xxx // external connection - use your public IP
如果您想从本地网络之外进行外部连接,可以在canyouseeme.org上找到您的公网 IP 地址。此外,如果您现在检查 22 端口是否已打开,应该会看到“成功:我可以在 your_ip 的 22 端口上看到您的服务”。这意味着端口转发和初始服务器设置已正确完成。干得好!
在 Ubuntu 上安装 Apache Web 服务器
Apache Web 服务器是最流行的 Web 服务器之一,而且安装起来相当简单。
sudo apt-get update // update available software list
sudo apt install apache2 // install apache2 package
Apache 已经安装完毕,要使其正常工作,需要修改防火墙设置以允许外部访问 Apache Web 服务器。
之前我们开放了 22 端口用于 SSH 连接,现在需要开放 80 端口供 Apache 使用。如果您计划在网站上安装 SSL 证书,我建议使用“Apache Full”配置文件,该配置文件会同时开放 80 和 443 端口。对于不使用 SSL 的网站,仅开放 80 端口的“Apache”配置文件即可满足需求。
sudo ufw app list // list ufw application profiles
// Available applications:
// Apache
// Apache Full
// Apache Secure
// OpenSSH
sudo ufw allow 'Apache' // opens port 80
sudo ufw allow 'Apache Full' // opens port 80 and 443
sudo ufw allow 'Apache Secure' // opens port 443
如果您检查当前的防火墙状态,应该会看到类似的输出。如果您使用的是“Apache”配置文件,则防火墙现在允许通过端口 80 的流量;如果您使用的是“Apache Full”配置文件,则防火墙也允许通过端口 443 的流量。
sudo ufw status // current firewall status
// Status: active
// To Action From
// -- ------ ----
// Apache Full ALLOW Anywhere
// OpenSSH ALLOW Anywhere
// Apache Full (v6) ALLOW Anywhere (v6)
// OpenSSH (v6) ALLOW Anywhere (v6)
访问canyouseeme.org并检查 80 端口是否已打开。如果显示“成功:我可以在 your_ip 的 80 端口上看到您的服务”,则表示您的服务器可以从互联网访问。太棒了!
设置 Apache 虚拟主机
在配置 Apache 来托管您的网站之前,如果您检查 Apache 状态,应该会看到“active (running)”字样。要检查您的网站在本地是否能正常工作,请在浏览器中输入本地 IP 服务器地址(在我的例子中是 192.168.1.22)。
要检查您的网站是否在互联网上可用,我建议您使用智能手机。关闭 Wi-Fi,使用移动网络(3G/4G)。打开您的网络浏览器,输入您家庭网络的公网 IP 地址。如果您能看到 Apache 的默认首页,就可以确定您的服务器已启动并正在运行!
sudo systemctl status apache2 // check apache status
hostname -I // get local server IP address like 192.168.1.22
curl -4 icanhazip.com // get public IP address of your home network
Apache 默认从/var/www/html目录提供文档。我们将保留此目录不变,并创建一个新目录,用于提供我们的网站服务。
sudo mkdir /var/www/mywebsite
sudo nano /var/www/mywebsite/index.html
在“mywebsite”目录下,我们将创建一个“index.html”文件,并粘贴一些基本的HTML标记,保存并关闭该文件。
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h1>My website is live!</h1>
</body>
</html>
为了让 Apache 能够运行这个网站,需要创建一个新的虚拟主机(.conf)文件。默认配置文件位于/etc/apache2/sites-available/000-default.conf,我们将保留该文件不变,并创建新的mywebsite.conf文件。
sudo nano /etc/apache2/sites-available/mywebsite.conf
在mywebsite.conf文件中粘贴以下配置,该配置与默认配置类似,但已更新为您的 ServerAdmin、ServerName 和 DocumentRoot。
<VirtualHost *:80>
ServerAdmin your@email.com // your email
ServerName xxx.xxx.xxx.xxx // your public IP address
DocumentRoot /var/www/mywebsite // document root of your website
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
此时,我们需要使用a2ensite命令启用已创建的网站。
sudo a2ensite mywebsite.conf // enable mywebsite
别忘了使用a2dissite禁用 Apache 默认网站。
sudo a2dissite 000-default.conf // disable default Apache website
运行配置错误测试。您应该会收到“语法正确”的消息。
sudo apache2ctl configtest
// Syntax OK
最后,重启 Apache 服务器以使更改生效。
sudo systemctl restart apache2
在您的智能手机上,打开网络浏览器,输入您的公网 IP 地址,然后按回车键。如果您看到“我的网站已上线!”的字样,则表示您已成功配置 Apache Web 服务器,恭喜!
实用命令
以下是一些您在配置服务器时可能会用到的命令。
// UFW Firewall commands
sudo ufw allow OpenSSH
sudo ufw allow Apache
sudo ufw status numbered
sudo ufw delete X
// SSH server commands
sudo systemctl status ssh
sudo systemctl stop ssh
sudo systemctl start ssh
sudo systemctl disable ssh
sudo systemctl enable ssh
// Apache server commands
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2
sudo systemctl reload apache2
sudo systemctl disable apache2
sudo systemctl enable apache2
动态 IP 问题
大多数家庭网络的公网IP地址每24小时更换一次。此外,如果您的路由器与互联网断开连接,重新连接后会自动获得一个新的IP地址。
这是一个问题,因为每次您的 IP 地址发生变化时,要访问您的网站,您都需要使用当前网络的公网 IP 地址,并且还需要更新 Apache 配置文件。如果您拥有静态公网 IP 地址,那就没问题。通常,ISP 会对静态 IP 地址收取额外费用。
无需付费购买静态 IP 地址即可解决这个问题。您可以使用像no-ip.com这样的免费动态 DNS 服务,选择一个免费域名并将其指向您的公网 IP 地址。您还需要将该域名和您的 no-ip.com 帐户凭据添加到动态 DNS 路由器的设置中。
完成上述步骤后,您的路由器和动态 DNS 服务将协同工作,并在您的公网 IP 地址发生变化时自动更新。这样,您始终可以使用在动态 DNS 服务中选择的同一域名访问您的网站,因为它始终指向您当前的公网 IP 地址。
结论
现在你应该对Web服务器的工作原理有了基本的了解。在家搭建自己的Web服务器是锻炼服务器管理技能的好方法。掌握了在家搭建服务器的知识,管理AWS、DigitalOcean或类似服务的服务器对你来说应该不成问题。
接下来该怎么做呢?你可以购买一个域名,比如mydomain.com,并将其指向你的服务器 IP 地址。之后,你可以创建任意数量的子域名,比如subdomain.mydomain.com,并在同一个 Apache 实例上托管多个不同的网站。另外,在你的网站上安装 SSL 证书也是个好主意。不过,关于这方面的内容,我们稍后再谈,我得为我的下一篇博客留点素材。😉
文章来源:https://dev.to/lloyds-digital/how-you-can-host-websites-from-home-4pke