×

您要使用“Node.js配置NGINX和SSL”的知识点都在这里了

作者:Terry2020.05.27来源:Web前端之家浏览:7235评论:0
关键词:nodejsnginxsslHTTPS

500.jpg

NGINX是高性能HTTP服务器,也是反向代理。与传统服务器不同,NGINX遵循事件驱动的异步体系结构。结果,内存占用量低,性能高。如果您正在运行基于Node.js的Web应用程序,则应认真考虑将NGINX用作反向代理。

NGINX在提供静态资产方面非常有效。对于所有其他请求,它将与您的Node.js后端进行对话,并将响应发送给客户端。在本教程中,我们将讨论如何配置NGINX以与Node.js一起使用。我们还将看到如何在NGINX服务器中设置SSL。

注意:Node还具有内置的HTTPS模块,可以配置为读取必需的证书文件,而无需反向代理。您可以在我们的文章如何在Node.js中使用SSL / TLS中找到有关此内容的更多信息。

安装NGINX

假设您已经在计算机上安装了Node.js,让我们看看如何安装NGINX。

在Linux上安装

如果您正在运行Ubuntu,则可以使用以下命令来安装NGINX:

sudo apt-get updatesudo apt-get install nginx

如果您正在运行Ubuntu以外的Linux发行版,请查看NGINX安装文档【https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#prebuilt】以获取更多信息。

NGINX一旦安装,将自动启动。

在macOS上安装

如果您使用的是macOS,则可以使用Homebrew轻松安装NGINX。步骤如下:

  • Homebrew需要将目录/usr/local添加chown到您的用户名。因此,请首先在终端中运行以下命令:

    sudo chown -R 'username here' /usr/local
  • 现在,以下两个命令将在您的系统上安装NGINX:

    brew link pcre
    brew install nginx
  • 安装完成后,您可以键入以下命令来启动NGINX:

    sudo nginx
  • NGINX配置文件可以在这里找到:/usr/local/etc/nginx/nginx.conf

在Windows上安装

对于Windows,请转到NGINX 下载 页面并获取zip。下一步是解压缩归档文件,并在命令提示符下移动到目录,如下所示:

unzip nginx-1.3.13.zipcd nginx-1.3.13
start nginx

如您所见,该命令start nginx将启动NGINX。


现在安装已完成,让我们看看如何配置简单服务器。

设置Node.js服务器

首先,让我们创建一个简单的Node.js服务器。我们将首先启动一个项目并安装Express软件包:

mkdir node-demo && cd node-demonpm init -ynpm i express

创建一个名为的文件server.js,其中包含以下内容:

const express = require('express')const app = express()const port = 3000app.get('/', (req, res) => res.send('Hello World!'))app.listen(port, () => console.log(`Example app listening on port ${port}!`))

您可以通过运行启动服务器node server.js

配置NGINX

现在让我们打开NGINX的默认站点配置文件:

sudo nano /etc/nginx/sites-available/default

如果需要,可以直接转到目录并使用您喜欢的文本编辑器打开配置文件。

向下滚动时,会发现一个server块。看起来像这样:

server {
  listen       80;
  server_name  localhost;

  ....
  more config goes here
}

接下来,我们将配置server块以适合我们的需求。我们想要配置NGINX以便将所有请求传递到我们的Node.js服务器。server如下所示,用新的块替换上面的块:

server {
  listen       80;
  server_name  localhost;

  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

如您所见,Web服务器将在http://localhostport上侦听80。该location /块告诉NGINX如何处理任何传入请求。我们proxy_pass通常指向Node.js应用程序,http://localhost:3000在本例中该应用程序正在运行。

此时,您应该保存文件并键入以下内容以重新启动NGINX,具体取决于您的操作系统。

Ubuntu:

sudo service nginx restart

要么:

sudo /etc/init.d/nginx restart

苹果系统:


sudo nginx -s stop && sudo nginx

视窗:

nginx -s reload

完成此操作后,您可以转到http:// localhost以查看我们的代理正在运行。尽管您正在访问NGINX Web服务器,但是将从Node.js服务器获得实际响应。

注意:您需要确保端口80上没有其他任何东西(例如Apache)运行。

设定SSL

为了与用户的浏览器建立安全连接,我们需要获取数字证书。通常,您是从诸如Let's Encrypt之类的证书颁发机构获得的。如果您使用“让我们加密”路线,请确保使用Certbot安装证书,这将为您重新配置NGINX。

对于本地开发(以及本教程的后续操作),您还可以创建一个自签名证书。唯一的问题是,当有人访问您的网站时,浏览器将显示警告“证书不可信”。但是对于在本地计算机上进行测试来说,这是完全可以的。

获得证书和私钥后,即可在NGINX中设置SSL。您需要将我们之前的服务器块修改为以下内容:

server {
  listen       80;
  listen       443 ssl;
  server_name  localhost;

  ssl_certificate  /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key;

  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

而已!

现在,如果您访问 https:// localhost,则您的连接将是安全的。上面的配置假定证书和私钥分别位于/etc/nginx/ssl/server.crt/etc/nginx/ssl/server.key,但是您可以根据需要更改这些位置。

服务静态资源

在Node.js服务器之前设置NGINX的另一个好处是,我们可以轻松地对其进行配置,以提供应用程序所需的任何静态资产。这将节省通过这些请求供Node处理的开销。

为此,我们需要location在服务器配置中添加一个新块:

server {
  listen       80;
  server_name  localhost;

  location / {
    ...
  }

  location /public {
    root /usr/local/var/www;
  }
}

在此location块中,我们将根目录设置为/usr/local/var/www,但您可以根据需要选择其他目录。结果,无论何时有类似的请求http://localhost/public/somepath/file.html,NGINX都会/usr/local/var/www/public/somepath/file.html直接从中提供文件。

结论

在这个简短的教程中,我们已经看到了如何将NGINX用作Node.js应用程序的反向代理并配置SSL。通过使用NGINX处理静态资源,您还可以减轻Node应用程序的负担。

下一篇文章将给大家介绍:Node.js中使用SSL / TLS。请持续关注我们,如有问题,可以留言或者加Q群讨论。

您的支持是我们创作的动力!
温馨提示:本文作者系Terry ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://jiangweishan.com/article/node20200527a3.html

网友评论文明上网理性发言 已有0人参与

发表评论: