我是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
。