根据URL前缀传递代理



我是NginX的新手,我一直在努力弄清楚如何做到以下几点;

  • example.com转发到运行在端口3000上的express应用程序,目的是为客户端提供服务
  • dashboard.example.com转发到运行在端口3001上的express应用程序,目的是为管理员服务

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

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?

问题似乎是您总是重定向到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,则需要从第4行删除dashboard.example.com

最新更新