【问题标题】:Nginx reverse proxy for port 30013001端口的Nginx反向代理
【发布时间】:2020-08-12 22:54:39
【问题描述】:

我有一个在端口 3001 上运行的快速服务器,它为 React 应用程序提供服务。

假设我的域名是 example.com; 我想要实现的是:

  1. 可以拨打https://example.net/api/getUsers

  2. 从带有端口的http://1.2.3.4:3001/重定向到https://example.net/

  3. 基本上将所有 HTTP 调用(无论是 IP 还是域)重定向到 https://example.net/

谁能帮忙设置 Nginx 配置? 这是我目前在 /etc/nginx/sites-available 下拥有的:

server {
        server_name 1.2.3.4:3001;
        return 301 https://example.net;
}

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        listen 443 default_server ssl;
        listen [::]:443 default_server ssl;
        server_name example.net www.example.net;

        return 301 https://example.net$request_uri;
}

server {
  listen 80;

  server_name example.net www.example.net;

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

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.net/fullchain.pem; # managed by Certbot
   ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

【问题讨论】:

    标签: node.js express nginx proxy reverse


    【解决方案1】:

    看起来您的应用正在返回带有位置的重定向:http://1.2.3.4:3001/ 你可以用 proxy_redirect 重写它并减少多余的东西。

    server {
            listen 80 default_server;
            return 301 https://example.net$request_uri;
    }
    
    server {  
      listen 443 ssl; # managed by Certbot
      ssl_certificate /etc/letsencrypt/live/example.net/fullchain.pem; # managed by Certbot
      ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem; # managed by Certbot
      include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
      server_name example.net www.example.net;
    
      location / {
        proxy_pass http://localhost:3001;
        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;
        proxy_redirect http://1.2.3.4:3001/ $scheme://$host/;
      }
    }

    是的,您可以添加以下重定向:

    server {
            listen 1.2.3.4:3001;
            return 301 https://example.net;
    }
    

    但请注意您的 react 应用。本地监听 localhost:3001

    proxy_pass http://localhost:3001;
    

    所以确保响应应用程序。也没有监听 1.2.3.4:3001 套接字。 否则,您将收到Address already in use 错误,并且 nginx 将无法启动。

    【讨论】:

    • 感谢您的回答。它基本上可以工作,但我想知道是否有办法从1.2.3.4:3001 重定向到drsteam.net
    • 我的意思是,我的 React 基本上只是由我的 Node.js 服务器提供服务,它监听端口 3001,改变它不是我的目标。我的目标只是将 IP:PORT 重定向到域。有可能吗?
    • 嗯,这听起来很模棱两可。因此,为了让客户端能够连接到 1.2.3.4:3001,nginx 应该在 1.2.3.4:3001 上进行监听,并使用该服务器块“返回”到 example.net 执行重定向。尽管如此,在我对 1.2.3.4:3001 的回答中仍然有重定向示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2021-11-09
    • 2017-02-07
    • 1970-01-01
    • 2012-10-25
    • 2012-11-04
    • 2021-03-02
    相关资源
    最近更新 更多