# Node app开发及Nginx发布环境部署

在 Ubuntu 系统上配置 Nginx 作为 Node.js 应用的反向代理，可以让你将 Nginx 设置为前端服务器，它将接收外部请求并将这些请求转发给后端的 Node.js 应用。以下是详细的步骤来配置 Nginx 以实现这一功能。

## 步骤 1: 安装 Node.js 和 Nginx

首先，确保你的系统上安装了 Node.js 和 Nginx。你可以使用以下命令来安装它们：

```bash
更新包列表
sudo apt update

安装 Node.js 和 npm
sudo apt install nodejs npm

安装 Nginx
sudo apt install nginx
```

## 步骤 2: 启动并启用 Nginx 服务

安装完成后，启动并启用 Nginx 服务：

```bash
启动 Nginx
sudo systemctl start nginx

设置 Nginx 开机自启
sudo systemctl enable nginx
```

## 步骤 3: 创建 Node.js 应用

你可以使用任何你喜欢的框架（如 Express）来创建一个简单的 Node.js 应用。这里是一个使用 Express 的示例：

```bash
创建一个新的 Node.js 项目目录
mkdir my-node-app
cd my-node-app

初始化 npm 项目
npm init -y

安装 Express
npm install express

创建一个简单的 Express 应用 (app.js)
nano app.js
```

在 `app.js` 中写入以下代码：

```javascript
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello from Node.js!');
});

app.listen(port, () => {
  console.log(`Node.js app listening at http://localhost:${port}`);
});
```

## 步骤 4: 配置 Nginx 作为反向代理

编辑 Nginx 的配置文件，通常位于 `/etc/nginx/sites-available/default` 或创建一个新的配置文件：

```bash
sudo nano /etc/nginx/sites-available/my-node-app
```

在文件中添加以下配置：

```nginx
server {
    listen 80; 或者你选择的端口号，例如 8080 或其他端口号，如果你不想使用80端口，记得在防火墙中开放该端口。
    server_name your_domain_or_IP; 你的域名或服务器IP地址，如果是本地测试可以使用 localhost 或 IP地址。
    location / {
        proxy_pass http://localhost:3000; 这里是 Node.js 应用的地址和端口。
        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;
    }
}
```
保存并关闭文件。然后，重启 Nginx 以应用更改：

```bash
sudo systemctl restart nginx
```

## 步骤 5: 运行 Node.js 应用并测试配置

在后台运行你的 Node.js 应用：

```bash
node app.js &
```
或者使用 `pm2`（一个更强大的进程管理工具）来管理你的 Node.js 应用：
```bash
npm install pm2 -g 全局安装 pm2（如果尚未安装）
pm2 start app.js 使用 pm2 启动应用。这样你可以更容易地管理你的应用。例如重启、停止等。
```
现在，你应该可以通过浏览器访问 `http://your_domain_or_IP` 来看到你的 Node.js 应用通过 Nginx 反向代理的响应了。如果你使用的是本地测试，确保你的防火墙设置允许访问你选择的端口（例如80或8080）。如果使用的是非标准端口，你可能需要在浏览器中指定完整的 URL（如 `http://localhost:8080`）。