Nginx 是一个 Web 服务器,用来作反向代理、负载均衡器、邮件代理和 HTTP 缓存,它遵循主从式架构。
嗯,一个复杂的术语和一个令人困惑的定义,充满了令人困惑的大词,对吗?
别担心,我可以帮助大家首先了解 Nginx 架构和术语的基本框架。然后我们将继续安装和创建Nginx配置。
为了让事情变得简单,请记住:Nginx 是一个令人叹为观止的 Web 服务器。
Web服务器,简单来说,就像一个中间人。假设你想要访问 dev.to,你在浏览器中输入地址https://dev.to,浏览器会找到Web服务器的地址,https://dev.to然后将其定向到后端服务器,后端服务器会将响应返回给客户端。
在此,让client1和client2通过Proxy服务器向服务器发送请求request1和request2。此时后端服务器将不知道request1是由client1还是client2发送的,但是会执行操作。
在此,客户端将通过Web服务器发送请求。现在,Web服务器将通过一种算法定向到众多服务器中的任何一个,其中一个是循环法(最可爱的一个),并通过Web服务器将响应发送回客户端。
所以在此处,客户端并不知道它与哪个后端服务器交互。
如果对于后端服务器server1存储了一些信息,则它不会为服务器server2存储,因此交互的客户端(此处为 Bob)可能不会获得所需的结果,因为它可能与 server1 或 server2 交互。
在这种情况下,server1 将允许 Bob 查看配置文件,但 server2 则不允许。因此,即使它阻止了对数据库的许多 API 调用并且速度更快,它也可能导致跨不同服务器的问题。
这很简单,如果我通过 Web 服务器从客户端发送请求到后端服务器server1,它将向客户端提供一个令牌(Token)以用于访问任何进一步的请求。客户端可以使用令牌并向Web服务器发送请求。该 Web 服务器将请求连同令牌一起发送到任何后端服务器,每个后端服务器将提供相同的所需输出。
该图是我到目前为止解释中所有概念的组合。在此,我们有 3 个后端服务器在端口 3001、3002、3003 上运行,所有这些后端服务器都使用在端口 5432 上运行的相同数据库。
GET /employees
现在,当客户端在(默认在端口 443 上)发送请求到 https://localhost时,它将根据算法将此请求传递到任意后端服务器,并从数据库中获取信息,并将 JSON 发送回 Nginx Web 服务器并发送返回给客户端。
如果我们要使用诸如round-robin之类的算法,那么假设客户端 2 也发送了一个请求:https://localhost,那么 Nginx 服务器将首先将请求传递到端口 3000,然后将响应发送回客户端。对于另一个请求,Nginx 会将请求传递给 3002 等等。
至此,你已经清楚地了解了 Nginx 是什么,以及 Nginx 使用的术语。现在我们将继续了解安装和配置技术。
$ brew install nginx
如下图示:
等待它下载并安装,然后你的系统上现在已经安装了 Nginx!😛
要运行它并检查 Nginx 是否在您的系统上运行,请使用如下命令:
$ nginx
# 或者
$ sudo nginx
之后,打开你的Chrome并打开 http://localhost:8080/,你将看到以下屏幕!
.
├── nginx-demo
│ ├── content
│ │ ├── first.txt
│ │ ├── index.html
│ │ └── index.md
│ └── main
│ └── index.html
└── temp-nginx
└── outsider
└── index.html
另外,在html和md文件中都包含了基本上下文。
$ cd /usr/local/etc/nginx
$ vim nginx.conf
这将打开一个带有默认 nginx 配置的文件,这里我不想对它做更改,我通常所做的方法是复制此配置文件,然后对主文件进行更改。
$ cp nginx.conf copy-nginx.conf
$ rm nginx.conf && vim nginx.conf
现在这将打开一个空文件,我们将为其添加配置。
添加基本的配置设置。添加 是必须的,events {}因为它通常用于提及 Nginx 架构的工作线程数量。我们在这里用来http告诉 Nginx 我们将在OSI 模型的第 7 层工作。
在此,我们告诉 nginx 监听端口 5000 并指向主文件夹中提到的静态文件。
http {
server {
listen 5000;
root /path/to/nginx-demo/main/;
}
}
events {}
接下来,我们将为/content和/outsiderURL 添加其他规则。
其中外部人员将指向第一步中提到的根目录之外的目录。
这里location /content表示在叶目录中定义哪个根,内容子 URL 都将添加到定义的根 URL 的末尾。
因此在这里,当我指定 root 时,root /path/to/nginx-demo/它表示着我告诉 Nginx 显示http://localhost:5000/path/to/nginx-demo/content/文件夹中静态文件的内容。
http {
server {
listen 5000;
root /path/to/nginx-demo/main/;
location /content {
root /path/to/nginx-demo/;
}
location /outsider {
root /path/temp-nginx/;
}
}
}
events {}
很酷!现在,Nginx 不仅限于定义 URL 根,还可以设置规则,以便我可以阻止客户端访问某些文件。
我们在主服务器中编写一条附加规则,定义为阻止任何.md文件被访问。可以在 Nginx 中使用正则表达式,将定义规则如下:
location ~ .md {
return 403;
}
现在我们已经了解了什么是代理和反向代理,因此我们将首先定义在端口 8888 指向运行的另一个后端服务器。假设我们有 2 个在端口 5000 和 8888 上运行的后端服务器。
我们要做的是,当客户端通过 Nginx 访问端口 8888 时,我们会将这个请求传递到端口 5000 并将响应发回客户端。
server {
listen 8888;
location / {
proxy_pass http://localhost:5000/;
}
location /new {
proxy_pass http://localhost:5000/outsider/;
}
}
http {
server {
listen 5000;
root /path/to/nginx-demo/main/;
location /content {
root /path/to/nginx-demo/;
}
location /outsider {
root /path/temp-nginx/;
}
location ~ .md {
return 403;
}
}
server {
listen 8888;
location / {
proxy_pass http://localhost:5000/;
}
location /new {
proxy_pass http://localhost:5000/outsider/;
}
}
}
events {}
接着运行此代码:
sudo nginx
额外的 Nginx 命令
用于测试配置文件中格式是否正确的命令:
sudo nginx -T
首次启动 Nginx Web 服务器。
$ nginx
#OR
$ sudo nginx
重新加载正在运行的 Nginx Web 服务器。
$ nginx -s reload
#OR
$ sudo nginx -s reload
停止正在运行的 Nginx 服务器。
$ nginx -s stop
#OR
$ sudo nginx -s stop
了解系统上是否正在运行 Nginx 进程。
$ ps -ef | grep Nginx
第 4 个命令很重要,如果前 3 个命令有可能导致一些错误,通常情况下可使用第 4 个命令找到所有正在运行的 Nginx 进程然后终止它们,然后再重新启动它。
要终止进程,需要刚才显示的 PID,然后使用以下命令终止它:
kill -9
OR
kill -9
sudo
现在我们已经对 Nginx 及其配置有了基本的了解。如果有其它想法欢迎通过评论告诉我。
让我们一起享受和探索 Nginx 的魔力吧!
作者:万能的大雄
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。