初识NGINX

NGINX,发音为"engine-x",是一个开源 Web 服务器,主要用于反向代理、缓存和负载平衡。

作为一个后端开发者,那么在您职业生涯的某个阶段您可能需要使用 NGINX。本文将帮助您开始使用 NGINX。最后,您将能够设置自己的 NGINX Web 服务器。您还将了解负载平衡和反向代理等术语。

为什么选择 NGINX?

NGINX 广泛用于提供 Web content。它以其高性能、稳定性和效率而闻名,使其成为各种 Web 应用程序和网站的流行选择。

NGINX 的一些主要功能包括:

  1. Web 服务器:它可以直接向客户端提供静态内容(例如 HTML、CSS 和图像),从而高效地交付网页。
  2. 反向代理:它可以充当反向代理,将客户端的请求转发到其他服务器。这是安全性和可扩展性方面的常用做法。
  3. 负载均衡器⚖:它可以将传入流量路由到不同的服务器实例,确保最佳的资源利用率。
  4. SSL/TLS Termination:它可以处理 SSL/TLS termination,加密和解密客户端和服务器之间的数据。
  5. 性能优化⚡:设计轻量高效,能够以较低的资源占用处理大量并发连接。

安装

Ubuntu/Debian
sql 复制代码
sudo apt update
sudo apt install nginx

安装后,NGINX 将在后台自动启动。要检查状态,请运行:

lua 复制代码
sudo systemctl status nginx
苹果系统

我们可以使用brew安装它

brew install nginx

安装后,您可以使用以下命令运行它:

sql 复制代码
brew services start nginx
Windows
  1. 从官方网站下载NGINX的最新稳定版本:NGINX下载
  2. 将下载的 zip 文件解压缩到您选择的位置。
  3. 导航到 NGINX 目录并运行nginx.exe. NGINX 应该启动。

配置

要查找配置文件,请运行:

vbnet 复制代码
nginx -t

nginx: the configuration file /opt/homebrew/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /opt/homebrew/etc/nginx/nginx.conf test is successful

此命令测试配置文件是否存在语法错误和拼写错误,但不应用它。它还将显示主配置文件的路径。

您可以直接编辑此文件,也可以创建一个新文件以进行后续操作。

Serving HTML

如果您检查该nginx.conf文件,您会看到许多块被包裹起来{},并且这些块内有许多键值对。

这些块称为上下文 ,键值对称为该上下文的指令。

我们将清除文件并从头开始。你的nginx.conf应该看起来像这样:

bash 复制代码
events {}

http {
    server {
        listen 8080;
        root /Users/syfe/Desktop/tutorials/nginx-test/html;
    }
}

您只需要events上下文http即可成功加载配置。在内部http,我们有server包含 Web 服务器配置的上下文。

它告诉服务器listen打开端口8080并将root文件设置为/Users/syfe/Desktop/tutorials/nginx-test/html.

html目录中,我们将创建一个index.html文件。

xml 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>Hello, world!</h1>
</body>

</html>

这是当前目录结构的样子。

如果您创建了一个新的conf文件,您可以通过运行以下命令加载它:

r 复制代码
nginx -c path_to_your_file

对任何conf文件进行更改后,您可以使用以下命令应用它:

nginx -s reload

如果继续http://localhost:8080,您将看到正在提供的 html。

提供其他静态内容

如果您尝试使用 CSS 文件向 HTML 内容添加样式并使用当前配置提供服务,它将无法工作。

要实现此功能,您必须在配置中设置正确的 mime 类型。

arduino 复制代码
...
http {
  types {
    text/css   css;
    text/html  html;
  }

  server {
    ...
  }
}
...

但为所有不同类型的资产手动添加这些 mime 类型非常麻烦。因此,NGINX 附带了一个mime.types可以在这里使用的默认文件。

添加默认的 mime 类型文件后,我们的配置如下所示:

bash 复制代码
events {}

http {
    # include mime.types; (if you did not create a custom file)
    include /opt/homebrew/etc/nginx/mime.types;

    server {
        listen  8080;
        root    /Users/syfe/Desktop/tutorials/nginx-test/html;
    }
}

重新加载conf后,我们的HTML和CSS应该按预期工作,但现在我们支持很多类型。

location block

假设您有以下目录结构:

转至/animals, 将提供目录index.html内的文件animals。如果您想要另一个接口/forest提供相同的文件怎么办?

我们可以使用该location块来指定完整路径,然后使用alias我们可以设置将提供文件的目录。

bash 复制代码
events {}

http {
    include /opt/homebrew/etc/nginx/mime.types;

    server {
        listen  8080;
        root    /Users/syfe/Desktop/tutorials/nginx-test/html;

        location /forest {
            alias /Users/syfe/Desktop/tutorials/nginx-test/html/animals;
        }
    }
}

通过上述配置,/forest将从目录中处理请求animals

如果有人删除了animals目录或者我们尝试提供的文件不可用怎么办?我们可以使用指令提供后备文件try_files

让我们创建一个后备文件。

现在,让我们更新配置。

bash 复制代码
events {}

http {
    include /opt/homebrew/etc/nginx/mime.types;

    server {
        listen  8080;
        root    /Users/syfe/Desktop/tutorials/nginx-test/html;

        location /animals {
            root /Users/syfe/Desktop/tutorials/nginx-test/html;
            try_files /animals/fallback.html /index.html =404;
        }
    }
}

现在,当用户访问时/animals

  1. 首先服务器会寻找/animals/index.html.
  2. 如果不存在,它将寻找/animals/fallback.html.
  3. 如果我们的后备文件丢失,它将尝试提供index.html根目录服务。
  4. 如果它找不到我们列出的任何文件,则会抛出 404 错误。

重定向

使用 NGINX 设置重定向非常容易。让我们更新配置以将所有传入流量重定向/birds/animals

bash 复制代码
events {}

http {
    include /opt/homebrew/etc/nginx/mime.types;

    server {
        listen  8080;
        root    /Users/syfe/Desktop/tutorials/nginx-test/html;

        location /animals {
            root /Users/syfe/Desktop/tutorials/nginx-test/html;
        }

        location /birds {
            return 307 /animals;
        }
    }
}

返回就307可以了。

反向代理

要将请求转发到另一台服务器,我们可以使用该proxy_pass指令。

ini 复制代码
events {}

http {
    include /opt/homebrew/etc/nginx/mime.types;

    server {
        listen 8080;

        location / {
            proxy_pass http://192.168.10.5:8080;
        }
    }
}

现在,所有请求都localhost:8080将转发到http://192.168.10.5:8080。当您不想透露实际服务器或想要根据不同路径将请求中继到不同服务器时,这非常有用。

负载均衡

有时,在高流量情况下,我们可能会启动多个实例来处理负载。NGINX 可以充当负载均衡器,在所有实例之间均匀分配请求。

这可确保为我们的用户提供无缝体验,而不会造成任何停机。

让我们更新配置来实现这一点:

ini 复制代码
events {}

http {
    include /opt/homebrew/etc/nginx/mime.types;

    upstream instances {
        server 192.168.10.2:8080;
        server 192.168.10.3:8080;
        server 192.168.10.4:8080;
    }

    server {
        listen 8080;

        location / {
            proxy_pass http://instances;
        }
    }
}

upstream块用于指定可以被引用的一组服务器proxy_pass。NGINX 将自动均匀地分配请求。

log

凭借迄今为止所学到的所有知识,您将能够做很多很酷的事情。最后一件(也是重要的)对您的工作有帮助的事情是 - 日志记录。

让我们更新配置以在服务器上添加访问日志:

bash 复制代码
events {}

http {
    include /opt/homebrew/etc/nginx/mime.types;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ';
    access_log /Users/syfe/Desktop/tutorials/nginx-test/access.log main;

    server {
        listen 8080;
        root /Users/syfe/Desktop/tutorials/nginx-test/html;
    }
}

我们提供 using 指令的格式log_format。该access_log指令采用我们之前指定的存储日志的路径和格式。

相关推荐
这个需求建议不做1 小时前
vue3打包配置 vite、router、nginx配置
前端·nginx·vue
&星辰入梦来&2 小时前
Nginx从入门到入土(三): 静态资源管理与代理服务
运维·nginx·负载均衡
苹果醋33 小时前
SpringCloud系列之一---搭建高可用的Eureka注册中心
运维·nginx
丶21366 小时前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
ZHOU西口17 小时前
微服务实战系列之玩转Docker(十五)
nginx·docker·微服务·云原生·swarm·docker swarm·dockerui
苹果醋321 小时前
react 路由 react-router/react-router-dom
运维·nginx
ps酷教程1 天前
nginx进阶篇(二)
nginx
双普拉斯1 天前
微信小程序点赞动画特效实现
nginx·微信小程序·notepad++
苏少朋1 天前
Docker安装 ▎Docker详细讲解 ▎数据卷挂载 ▎Nginx安装理解
linux·nginx·docker·容器
比花花解语1 天前
怎么使用nginx把80端口代理到想要的端口?
运维·nginx