Nodejs 在windows环境下 Nginx反向代理有人试过吗

Nodejs 在windows环境下 Nginx反向代理有人试过吗

我这边的环境就是windows了: 我的conf文件是这样配置的(主要部分):

upstream mysite.com{
        server 127.0.0.1:3000;
    }
    server {
        listen       0.0.0.0:8080;
        server_name  mysite.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            
            proxy_pass   http://127.0.0.1:3000;
            proxy_redirect off;
            proxy_http_version 1.1;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_read_timeout 300s;           
        }
}

当我键入mysite.com时就是出现not found之类的。我在stackoverflow上也找了一下,但是还是没有解决。

所以在这里希望能得到准确的解答。同时也给以后遇到类似于此问题的同学一个解决的方法。:)


11 回复

当然可以!下面是一个详细的解答,包括如何在 Windows 环境下使用 Nginx 作为反向代理来转发请求到 Node.js 应用。

配置 Nginx 反向代理

首先,确保你已经安装并启动了 Nginx 和 Node.js。以下是你需要做的步骤:

1. 配置 Nginx

编辑你的 Nginx 配置文件(通常是 nginx.conf 或者在 sites-available 目录下的某个文件)。你可以参考你提供的配置,但需要注意一些细节。

# 定义上游服务器
upstream mysite {
    server 127.0.0.1:3000;
}

# 配置 HTTP 服务
server {
    listen 8080;  # 监听端口
    server_name mysite.com;  # 你的域名或 IP 地址

    # 处理所有请求
    location / {
        proxy_pass http://mysite;  # 将请求转发到上游服务器
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header X-NginX-Proxy true;
        proxy_read_timeout 300s;  # 设置超时时间
    }
}

2. 启动 Node.js 应用

确保你的 Node.js 应用监听在 127.0.0.1:3000 上。你可以创建一个简单的 Express 应用来测试:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('Hello World!');
});

app.listen(3000, () => {
    console.log('Node.js application is running on port 3000');
});

保存并运行该应用:

node app.js

3. 启动 Nginx

启动 Nginx 并加载你的配置文件。你可以通过命令行启动 Nginx:

nginx -c "path\to\your\nginx.conf"

确保路径正确,并且 Nginx 没有报错。如果有错误,Nginx 会在启动时输出错误信息。

测试配置

打开浏览器并访问 http://localhost:8080(假设你使用的是本地主机)。你应该能看到 “Hello World!” 的响应。

如果一切正常,你应该能够看到页面内容而不是 “Not Found” 错误。如果仍然有问题,请检查 Nginx 和 Node.js 的日志文件以获取更多信息。

希望这些步骤能帮助你解决问题!


nginx在windows下可是很不怎么样的, 还是用iis吧

<div>我的<strong> nginx </strong>(Tengine) 配置是这样的,运行是成功的,cookie、session什么的也都正常:</div><pre class=“prettyprint”> http { server { listen 80; server_name localhost; location /{ proxy_pass http://nodejs_upstream/; } location /http-bind/ { proxy_pass http://localhost:7070/http-bind/; } } upstream nodejs_upstream { server 127.0.0.1:3000; } }</pre>

用127.0.0.1:8080就可以访问到了,如果你想用mysite.com:8080访问, 记得在host文件增加一条DNS 127.0.0.1 mysite.com

upstream nodejs__upstream2 {
     server 127.0.0.1:3000;
     keepalive 64;
}
server {
     listen 8080;
     server_name localhost;
     location / {
         proxy_set_header   X-Real-IP            $remote_addr;
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
         proxy_set_header   Host                   $http_host;
         proxy_set_header   X-NginX-Proxy    true;
         proxy_set_header   Connection "";
         proxy_http_version 1.1;
         proxy_pass         http://nodejs__upstream2;
     }
}

需要nginx -s reload,你确保都执行了吗?

5楼 9楼 正确

etc下hosts文件加一行 ip 域名~~

用node proxy即可,不需要nginx

曾经试过,真的不建议在windows下用nginx,支持性非常差,不知道最新版的nginx是否已经很好兼容windows了,之前部署就没成功过,而且访问非常慢,后面自己就了linux服务器了

要在Windows环境下使用Nginx作为反向代理来转发请求到Node.js服务器,你的Nginx配置文件已经很接近正确了。下面是几个需要注意的点:

  1. 确保Node.js服务正在运行:在启动Nginx之前,请确保你的Node.js应用程序正在监听端口3000。

  2. 检查防火墙设置:确保Windows防火墙允许通过8080端口的流量。

  3. 更新Nginx配置文件:根据你提供的配置文件,我建议做一些调整以确保它能正常工作。

这里是经过调整的配置示例:

# 定义上游服务器
upstream node_app {
    server 127.0.0.1:3000;
}

# 配置虚拟主机
server {
    listen 8080;
    server_name localhost;  # 你可以修改为你的域名或IP地址

    location / {
        proxy_pass http://node_app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 300s;
    }
}
  1. 重启Nginx服务:保存并关闭配置文件后,在命令行中执行nginx -s reload以应用新的配置。

  2. 访问你的应用:打开浏览器并输入http://localhost:8080/或者如果你有域名,则输入http://yourdomain.com:8080/,你应该能看到你的Node.js应用。

如果一切正常,Nginx应该能够成功地将请求从端口8080转发到你的Node.js应用运行的端口3000。如果仍然遇到问题,请检查Nginx的日志文件,通常位于C:\nginx\logs\error.log,以获取更多信息。

回到顶部