编程技术分享平台

网站首页 > 技术教程 正文

俄罗斯不愧是战斗民族:nginx(俄罗斯不愧是战斗民族句句爆怼韩国网友)

xnh888 2024-09-30 04:43:59 技术教程 21 ℃ 0 评论

无论你写的是前端还是后端,都需要一台服务器来放你的档案。尤其后端更是如此。但你可能会疑惑说,我用 Express 不是就可以启动一个服务器了吗?我为什么需要另外再找服务器?这个问题问得很好!

还记得你之前写过的简单后端 API 吗?我们让它跑在http://localhost:5566。可是,你要怎么让别人连进来你的电脑,看到你写的后端 API 呢?这个时候你就需要一个 Domain 了。

Domain 的中文翻译叫做网域,跟网址的概念很像,例如example.com就是一个 domain,如果你想买 domain 的话,可以参考知名的网域购买平台GoDaddy。在买了之后,你需要设定你的 domain,才能让其他人连到正确的地方。

假设你电脑的IP 是123.1.1.1 好了,你就要在你买网域的地方的后台设定把example.com指到123.1.1.1,这样子当别人输入example.com的时候,其实就是在连到123.1.1.1 了。网页的预设 port 是 80,所以 example.com 等于会连到 123.1.1.1:80,如果你想连到别的 port 的话,需要自己再设定一下。

可是,你有看过网址上面出现 port 的吗?这样也太难记了吧!因此,大多数都是直接用 80 port,省去使用者要自己输入 port 的麻烦。但问题就来了,如果我在一台主机上面,想要跑两个网站怎么办? example.com 跟 example2.com 虽然都设定好连到 123.1.1.1,可是 80 port 只有一个啊,我该怎么办呢?

这时候,你的救星来了,叫做 nginx,是一个「反向代理」的服务器。

有关于什么是代理,什么是反向代理,有一篇文章讲得超级清楚:反向代理为何叫反向代理? 。虽然他已经讲得很好了,但为了造福懒得点连结进去看的人,我再稍微解释一下。

要谈反向代理,就要先谈正向代理,什么是正向代理呢?例如说我缺一大笔钱,但我没信用不能借,我就找我朋友去跟银行借。这时候你朋友就是你的「代理」,而银行那边也只会知道这个代理人,不知道是你借的钱。用网路中的术语来讲,就是一台 proxy server,你先连到 proxy server,再从 proxy server 连到别的网站,所以那些网站的 IP 来源都是 proxy server,而不是你自己的电脑。

那反向代理是什么呢?就是你今天跟一个私人机构说要借钱,而那个私人机构也把钱借给你了。可是呢,其实私人机构背后有很多金主,你不知道是哪一个金主借你的钱,你只知道这个神秘私人机构是你的对口而已。

正向代理:Server 不知道到底真的 client 是谁。

反向代理:Client 不知道到底真的 server 是谁。

那反向代理可以做什么呢?

还记得刚刚讲到的问题吗?我们想要在一台主机上面跑两个不同的服务,这时候就可以在这台主机上先架一个反向代理的服务,也就是 nginx。再让 nginx 决定他要把这个 request 丢给哪一个服务,就可以达成目的了。

更白话一点讲,假设你今天 A 服务跑在 5566 port,B 服务跑在 7777 port。 nginx 对外监听的都是 80 port。当你第一个 request 进来的时候,Host 的值写着:example.com,nginx 就知道他要找的是 example.com,就可以帮你把这个 request 转送给 5566 port。当第二个 request 进来的时候,写着 example2.com,就会转送给 7777 port,这样就可以在一台主机上面跑一大堆的服务了。

我们来试试看 nginx 吧!

安装的话,只要 brew install nginx 就可以了。至于 nginx 的设定档,你可以在 /usr/local/etc/nginx 里面找到。你可以打开 nginx.conf 看看,这是预设的设定档案:

看不懂没关系,最后一行有个include servers/*;,代表会把 servers 资料夹下面的设定档全部都引入。我们在 servers 资料夹底下开一个 test.conf,马上来尝试看看 nginx 的威力。

接着我们用 node.js 写一个非常简单的 index.js,并且让它跑起来:

再来,因为你更改了 nginx 的设定档,所以需要重新启动一下 nginx,在 mac 上我最喜欢的是把 nginx 直接关掉再启动一次:sudo pkill nginx && sudo nginx。真的重新载入设定档的指令我记不太住...

最后只剩一个步骤了,那就是 exmaple.com 跟 example2.com 这两个 domain,现在都不是连到你自己这台电脑上,所以用 nginx 来监听根本就没有用。因此,你现在要把这两个 domain 指到 127.0.0.1。可是你又没有买这两个 domain,怎么设定呢?

在 Mac 里面,有一个档案叫做 /etc/hosts,里面就可以指定你要让哪一个 domain 连去哪边,这边的设置优先层级会最高。记得要用 sudo 来打开,才能更改档案。

这样子设置,就可以让这两个 domain 都指到自己的电脑了。接着打开浏览器,并且浏览这两个网址,你就会发现看到两个不同的页面了。

这篇只提到nginx 最基本最基本也是我最常用的功能,但事实上nginx 厉害的地方就在他可以做的事情还超级无敌多,你甚至可以搭配plugin 就直接用刚刚那个设定档来写程式!狂吧,不愧是俄罗斯人做出来的东西。

如果对 nginx 想更了解的,就自己去找一些资源吧!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表