【问题标题】:How to redirect different subdomains to applications running on different ports with nginx如何使用 nginx 将不同的子域重定向到在不同端口上运行的应用程序
【发布时间】:2020-06-24 16:35:05
【问题描述】:

我有 2 个 nodejs 应用程序在我的 EC2 实例中运行,端口为 3000 和 1337。我想要实现的是

admin.mydomain.com

应该重定向到在 PORT 1337 上运行的应用程序和

mydomain.com www.mydomain.com

应该重定向到在 PORT 3000 上运行的应用程序。

使用我当前的 nginx 配置,我得到一个 502

  map $subdomain $subdomain_port {
  default    3000;
  www        3000;
  admin      1337;
}

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

server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name ~^(?P<subdomain>.+?)\.historydiaries\.com$;

location / {
proxy_pass http://localhost:$subdomain_port;
proxy_redirect off;
}

ssl_certificate /etc/letsencrypt/live/historydiaries.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/historydiaries.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

ssl_session_cache shared:SSL:5m;
ssl_session_timeout 1h;
add_header Strict-Transport-Security “max-age=15768000” always;
}

【问题讨论】:

    标签: ssl nginx reverse-proxy lets-encrypt


    【解决方案1】:

    你可以使用两个不同的 nginx conf 来实现这一点

    【讨论】:

    • Nginx 将 conf 与 server_name 匹配。因此,如果您有准确的域条目,它将选择该 conf。
    【解决方案2】:

    我将使用单独的 Nginx 虚拟主机配置。

    一个用于www.mydomain.com,另一个用于 admin.mydomain.com

    server {
        listen 80;
        server_name www.mydomain.com;
        access_log /var/log/nginx/mydomain_access.log;
    
        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
    
            proxy_pass http://localhost:3000/;
            proxy_redirect off;
        }
    }
    

    server {
        listen 80;
        server_name admin.mydomain.com;
        access_log /var/log/nginx/admin.mydomain_access.log;
    
        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
    
            proxy_pass http://localhost:1337/;
            proxy_redirect off;
        }
    }
    

    这只是简单的虚拟主机配置。您可以稍后在需要时添加 Let's Encrypt。

    【讨论】:

    • 如果您也能提及使用letsencrypt设置的外观,那就太好了。谢谢
    猜你喜欢
    • 2018-07-01
    • 2015-03-15
    • 2021-03-18
    • 2011-08-28
    • 2015-08-21
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多