首页 > 解决方案 > 根据 URL 前缀传递代理

问题描述

我是 NginX 的新手,我一直在试图弄清楚如何做以下事情;

为此,我设置了以下配置;

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com dashboard.example.com;
    return 302 https://$server_name$request_uri;
}

# dashboard.example.com for administrators.
server {
  listen 80;

  server_name dashboard.example.com;

  location / {
    proxy_pass http://localhost:3001;
  }
}

# example.com for normal users.
server {
    # SSL configuration

    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate         /etc/ssl/cert.pem;
    ssl_certificate_key     /etc/ssl/key.pem;

    server_name example.com www.example.com;

    location / {
      proxy_pass http://localhost:3000;
    }
}

问题是 dashboard.example.com 和 example.com (就像www.example.com一样)都转发到在端口 3000 上运行的客户端服务器。我怎样才能让 dashboard.example.com 转发到 3001?

标签: expressnginx

解决方案


问题似乎是您总是重定向到 https(干得好!),但您只在 server_name example.com 和www.example.com上侦听 SSL 流量(端口 443) ,并且在 ssl 上没有代理配置仪表板。尝试类似:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com dashboard.example.com;
    return 302 https://$server_name$request_uri;
}

# dashboard.example.com for administrators.
server {
    # SSL configuration

  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  ssl_certificate         /etc/ssl/cert.pem;
  ssl_certificate_key     /etc/ssl/key.pem;

  server_name dashboard.example.com;

  location / {
    proxy_pass http://localhost:3001;
  }
}

# example.com for normal users.
server {
    # SSL configuration

    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate         /etc/ssl/cert.pem;
    ssl_certificate_key     /etc/ssl/key.pem;

    server_name example.com www.example.com;

    location / {
      proxy_pass http://localhost:3000;
    }
} 

让我知道重写中间块是否适合你。如果不打算在管理员的仪表板上使用 https,则需要dashboard.example.com从第 4 行中删除。


推荐阅读