如何通过 Nginx 将多个域名的 HTTP/HTTPS 最佳代理到不同的端口

如何通过 Nginx 将多个域名的 HTTP/HTTPS 最佳代理到不同的端口

我想将多个域(所有指向同一个服务器)代理到不同的服务(在不同的端口上运行)。

基本上,我想运行 2-3 个 Web 服务器(例如,在 docker-compose 设置中使用 Gitea、Postgres、Nginx 和 Certbot 来获取 HTTPS 证书的 Gitea)。我希望尽可能保持通用性,因此我希望避免使用需要了解所有特定服务及其证书的单个 Web 服务器。这意味着服务应保持原样。

我当前将域代理到唯一端口的解决方案如下:

# /etc/nginx/nginx.conf
events {}
http {
    server {
        listen 80;
        server_name domain1.example.org;
        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    server {
        listen 80;
        server_name domain2.example.org;
        location / {
            proxy_pass http://localhost:9080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}
stream {
    map $ssl_preread_server_name $name {
        domain1.example.org domain1;
        domain2.example.org domain2;
    }

    upstream domain1 {
        server localhost:8443;
    }

    upstream domain2 {
        server localhost:9443;
    }

    server {
        listen 443;
        proxy_pass $name;
        ssl_preread on;
    }
}

虽然这有效,但我想知道是否有更好/更简单的解决方案来解决这个问题,特别是在 HTTP 部分?

相关内容