很早以前,我就在想一个问题,为什么在浏览器中输入
www.baidu.com
就能出来百度首页,这个过程究竟是怎么一回事呢?本文概述的描述此过程。
目录:
1. 初体验
2. IP 地址
3. 端口 port
4. nginx 服务器
5. 域名
1. 初体验
下载 nginx1.12.1 window 64位。下载完成解压缩,无需安装,可直接使用。目录结构如下:
打开 html 目录,用以下内容替换 index.html 的内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>这是我的个人网站</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>千千阙歌</h1>
来日纵是千千阙歌 <br>
飘于远方我路上 <br>
来日纵是千千晚星 <br>
亮过今晚月亮 <br>
都比不起这宵美丽 <br>
亦绝不可使我更欣赏 <br>
</body>
</html>
打开 conf 目录修改 nginx.conf 文件。
......
server {
# 修改端口为 3000,默认为 80
listen 3000;
server_name localhost;
........
双击 nginx.exe
运行程序。 打开浏览器输入 127.0.0.1:3000
就可以看到刚刚创建的个人网站。
当然,可别以为如此简单就创建了一个网站。你迫不及待的霸占了坐在你旁边同事的机器,在他的电脑浏览器里也输入 127.0.0.1:3000
,结果并没有出现想象中的网页。这是为什么呢?要解释这个问题,得先介绍下 IP 和端口的相关常识。
2. IP 地址
以前看过一本黑客小说,里面写到:“只要知道别人的 IP 地址,就可以入侵别人的电脑”。计算机如果没有连接网络,是不会有 IP 地址的,此时任黑客多牛逼,也不可能进入你的计算机。这也是电脑中病毒后第一时间断网的原因。
- 公网 IP
- 内网 IP
-
127.0.0.1
和localhost
电脑连网,实际上只做了两件事情:接收别人发来的数据,给别人发送数据。这些数据都是由 0 和 1 组成的二进制的数据,如:1011010100001101......
,你所看到的视频,文字,网页等等一切在做网络中都会转换为 0 和 1,当然,这部分后面介绍 http 头信息时会详细介绍。
既然要接收信息和寄出信息,那么就需要一个地址。每一台连网的计算机都会有一个 IP 地址。计算机连接公司的网线上网,就使用公司的 IP 地址 IP1,计算机连接家里的网线,就使用家里的 IP 地址 IP2。
不管是公司的 IP 还是家里的 IP,最初都是在相关部门登记过的,直接由相关部门分配的一个地址。这样的 IP 叫做公网 IP,可以直接在百度中查询公网 IP 地址。
通常在家里,会安装一个路由器,然后用你的计算机和移动设备去连接路由器,此时路由器的 IP 是公网 IP,而路由器会自动创建子 IP 分别给你的计算机或者手机使用,由路由器分配的子 IP 就叫做内网 IP。可以通过在 DOS 窗口
敲入 ipconfig
获取,格式如:192.168.1.101
,其中,前面 192.168.1
是固定格式,最后一位是随动的。
通常本机 IP 是不固定的。如果你使用公司网络上网会是一个 IP 地址,而回到家里使用家里的网络又会是另一个 IP 地址。因此规定 127.0.0.1
或者 localhost
特指本机的 IP。
为什么要分公网 IP 和内网 IP 呢?其实在别人访问你的计算机时,只会访问公网 IP 或者是内网 IP 其中一个。如果是连接同一个路由器的其它计算机访问你的计算机,只能通过内网 IP 访问,此时通过公网 IP 是无法访问的,因为你们属于一个公网 IP 下。这一点在后面介绍 DNS 协议时会详细介绍。
有了 IP 地址,就可以找到某一台计算机。如最初在浏览器中输入 127.0.0.1:3000
就找到了当前计算机。那么 3000 又是什么意思呢?下面介绍端口的含义。
3. 端口 port
如果现在一边在线听音乐,一边和朋友聊 qq,那么这个过程是怎样的呢?
在线听音乐和聊 qq 都是需要连网的。这一点通过 IP 地址可以做到。以 qq 音乐为例:需要通过互联网获取音乐数据然后放到计算机的播放器中进行播放;而 qq 聊天需要连接网络接收朋友的短消息然后放到消息框中显示。如何保证这两个步骤传输的数据不会弄错呢?即音乐数据传到了 qq 聊天里,qq 聊天数据传输到了音乐里?这就涉及到了端口。
如果给 qq 音乐分配一个端口 4000(举例数字,实际并不是此端口,以下 5000 一样也是举例数字),给 qq 聊天分配一个端口 5000,并且规定在网络中传输数据时必须使用 ip:port
的方式作为地址。通过 ip 地址找到指定计算机,通过 port 找到计算机中运行的某一个应用程序,此时就可以准确的将数据传输到指定应用程序而不至混淆。
4. nginx 服务器
此时再回过头来看一看 127.0.0.1:3000
就豁然开朗了。127.0.0.1 是本地计算机的 IP 地址,而 3000 是 nginx 应用程序占用的端口号,这一点在最开始介绍的 conf 目录中的 nginx.conf 中有设置过。
此时,想要使用你同事的计算机访问你的网站就很容易了。
- 确定你的 ip 地址。如果你同事和你连接的都是同一个路由器的网络,那么通过
DOS 窗口
中键入ipconfig
查看内网 IP 地址。如果不是连接同一个路由器的网络,那么通过百度搜索 ip 获取你的外网 IP 地址。这里假定为内网 ip,地址为:192.168.1.101
。 - 确定在你的计算机上启动了 nginx 应用程序。应用程序只有被启动,端口号才会生效。上面设置的端口号为
3000
。 - 在你同事的计算机浏览器中输入
192.168.1.101:3000
。此时应该就可以看到你的网站了。
服务器
:nginx
是一款 Web 服务器应用程序,必须得运行着才能访问网站。通常所说的 Web 服务器指的就是类似 nginx 这种应用程序,类似的 Web 服务器应用程序还有 tomcat
。
服务器与 Web 服务器
:我将服务器总结为可以通过 ip:port
的方式找到,并且提供相应服务这样一个应用程序。 如 Nginx 服务器就是通过 ip:port
找到,并且提供网页服务,让我们在浏览器中可以看到网站。如通常所说的 Linux 服务器,其实就是 Linux 系统上的一个远程控制应用程序,这个应用程序启动后默认端口是 22,通过 <ip>:22
就可以连接到远程控制应用程序,而这个远程控制应用程序所做的事情就是启动 Linux 的 shell 终端。
服务器地址
:服务器 nginx 是运行在计算机上的,通过 ip 可以确定计算机位置,通过 port 可以确定 nginx 位置,因此 ip:port
就被称为服务器地址。此处示例的192.168.1.101:3000
就是本机上 nginx 的服务器地址;
5. 域名
当年一老兄闲着没事注册了 360 这个域名,后来 360 公司做大做强之后想要买回这个域名,可是花了一个亿人民币。
看到上面可能还有些疑惑,为什么百度的网址是 www.baidu.com
简单易记,而咱的网站就是 192.168.1.101:3000
这么一串数字呢?
按 F12 打开控制台,切换到 Network 选项卡,重新输入百度地址,可以看到信息如下图所示。事实上,访问的 服务器地址
是 115.239.210.27:443
。而 baidu.com
是它的别名,方便记忆,也被叫做 域名
。
域名注册
:域名需要在 域名注册机构 上进行注册,说是注册,其实就是购买,而且还是按照年限购买的,并不是买一个域名就永久拥有它,这一点与中国房屋占有权 60 年期限有点像。
域名备案
:注册过域名要进行备案,也就是让国家网络部门知道这个域名被谁用了,这过程是实名制的,防止你注册个域名结果弄个小黄网侵害青少年或干其它违法犯罪的事。建议在 阿里云
或 腾讯云
这样的厂商购买域名,后期域名备案也是一站式服务,只需填写信息等待即可。这个过程大概需要 30 天左右。
域名解析
:域名备案成功之后就是域名解析了,将域名与 ip 一一对应。这个过程自己操作不理解的话有点困难。当初第一个域名是在新网买的,以为买了域名在浏览器中输入就有东东,殊不知域名就是个别名,不绑定 ip 卵用也没,不过刚接触这个,域名解析也不会搞就浪费了。第二个域名是在腾讯云上买的,解析也很方便,引导信息也很清楚。
nginx 服务器配置
:如果域名解析也完成后,只需将注册的域名在服务器的配置文件:conf 目录下的 nginx.conf 文件做相应修改即可。
......
server {
# 修改端口为 3000,默认为 80
listen 3000;
# 服务器域名配置,修改为 dkvirus.com,默认为 localhost
server_name dkvirus.com;
........
此时在浏览器中输入 dkvirus.com:3000
就和输入 127.0.0.1:3000
是一样的啦。是不是感觉后面还有个 3000 尾巴很不爽。域名只是 ip 的别名,与端口无关。
http 协议规定,如果端口是 80,那么可以默认不写。
还是对 conf 目录下的 nginx.conf 文件做相应修改。
......
server {
# 修改端口为 80,默认为 80
listen 80;
# 服务器域名配置,修改为 dkvirus.com,默认为 localhost
server_name dkvirus.com;
........
重启 nginx 服务器,此时在浏览器中只需要输入 dkvirus.com
就可以打开网站了。其实应该写成 dkvirus.com:80
,只不过 80 端口默认可以不写,于是就变成了 dkvirus.com
。