node.js - "This site can’ t be reached"using Nginx as reverse proxy for Express Nodejs

标签 node.js http express nginx

我无法从外部访问我的 Node 服务器。在内部,我可以很好地访问它,但我无法这样做。

这是我的 nginx 配置。我只想使用我的外部 IP(例如,133.21.29.21)访问我的网站

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        listen 2500;

        location / {
          proxy_pass http://127.0.0.1:3005;
          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;
        }
}

服务器代码

    app.server.listen(3003, "0.0.0.0", () => {
            console.log(app.server.address());
    });

我目前正在 3003 端口上运行。我已经尝试过切断 nginx 配置并更改我的服务器代码(更改端口,省略“0.0.0.0”,使用“127.0.0.1”)但我没有任何运气。

我一直在尝试通过 my-external-ip:2500 访问我的服务器,但我也尝试过通过其他端口访问。

我已经禁用了 ufw 防火墙,但仍然没有成功。本地 curl 效果很好。

我做错了什么?

最佳答案

我认为您缺少代理重定向

看看下面的示例 NGINX 配置文件,位置/{ } 指向端口 9080 上的 Node 服务器,它通过导航到 https://... .com 来工作

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/thedomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/thedomain.com/privkey.pem;

    access_log /var/log/nginx/thedomain.access.log;
    error_log  /var/log/nginx/thedomain.error.log;

    server_name _;

    root            /var/www/html;

    index           index.html;

    gzip on;
    gzip_proxied any;
    gzip_types text/css text/javascript text/xml text/plain application/javascript application/x-javascript application/json;

    location /.well-known/ {
        try_files   $uri $uri/ =404;
    }

    location /jenkins {
        include /etc/nginx/proxy_params;
        proxy_pass          http://localhost:8080;
        proxy_read_timeout  90s;
        proxy_redirect      http://localhost:8080 https://www.thedomain.com/jenkins;
    }

    location /wss/pforex {
        include /etc/nginx/proxy_params;
        proxy_pass          http://localhost:9190;

        proxy_http_version  1.1;
        proxy_read_timeout  90s;
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection $connection_upgrade;
        proxy_redirect      http://localhost:9190 https://www.thedomain.com/wss/pforex;
    }

    location / {
        include /etc/nginx/proxy_params;
        proxy_pass          http://localhost:9080;
        proxy_read_timeout  90s;
        proxy_redirect      http://localhost:9080 https://www.thedomain.com;
    }
}

关于node.js - "This site can’ t be reached"using Nginx as reverse proxy for Express Nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663343/

相关文章:

http - OAuth 2.0 - 为什么授权服务器在资源所有者凭据无效时返回 400 而不是 401?

node.js - Express 路由器中间件中的请求正文为空

Node.JS 合并和 Swig

node.js - 在 Node.js 中实现同步和异步

node.js - 使用 Meteor.js 进行抓取

HTTP header 请求

html - 如果只更改当前 URL 的协议(protocol),相对 href 链接看起来如何?

javascript - ES2015 模块语法优于自定义 TypeScript 模块和命名空间 @typescript-eslint/no-namespace

javascript - 带超时的 Node.js 异步迭代器

javascript - 在 sails js 中,我们应该将 mongoDB 数据库计算应用程序插入 POST Controller 吗?