使用 NGINX 作为 webhost + 直接子域名请求到 dockerserver:port

使用 NGINX 作为 webhost + 直接子域名请求到 dockerserver:port

首先,我为标题苦苦挣扎。我来回尝试,疯狂地谷歌搜索,我找到的资源对我来说很可能太复杂了。但我觉得难以置信,我想做的事情竟然如此困难,而我认为应该非常简单。

所以;设置。

我有一个安装了 NGINX 的 RaspberryPi“服务器”(以下简称“服务器”)。(不是 docker 镜像)我有一个购买的 cloudflare 域,它有一个指向我服务器 IP 的 A 记录(根)。它还配置了带有端到端加密的 ssl/tls 选项。

一切都运行良好。全部配置完毕。浏览我的 domain.tld 会将我引导至服务器上的站点设置,一切正常。

现在,我遇到的问题是,除了这个 NGINX 安装之外,我还在运行 docker 服务。比方说……

1. music:1000
2. docker-admin:1001

两者都是 webGui。我可以分别通过 HTTP 使用 myip:port 来访问它们。但是。我想要通过 domain.tld:port 或更好的 music.domain.tld、docker-admin.domain.tld 来访问它们,它们指向使用我为 NGINX 使用的证书/tls 的 HTTPS 上的 docker 服务。

我到底该怎么做呢?(请注意,我曾尝试使用 nginxproxymanager 工具进行不同的尝试,但我对使用该方法不感兴趣,我希望通过 NGINX 来完成。)

我尝试过的所有方法都失败了,错误太多了,我都记不清了。以下是当前正常运行的 sites-available/domain.tld。

对于如何解决这个问题您有什么想法吗? 谨致问候! :) (请注意,domain.tld 当然不是真正的域名!)

server {
    listen 80;
    listen [::]:80;
    server_name domain.tld www.domain.tld;
    return 302 https://$server_name$request_uri;
}

server {

    # SSL configuration

    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate         /etc/ssl/cert.pem;
    ssl_certificate_key     /etc/ssl/key.pem;
    ssl_client_certificate /etc/ssl/cloudflare.crt;
    ssl_verify_client on;

    server_name domain.tld www.domain.tld;

    root /var/www/domain.tld/html;
    index index.html index.htm index.nginx-debian.html;


    location / {
            try_files $uri $uri/ =404;
    }

}

答案1

如果您从 cloudflair 获得的域名指向您的服务器。您可以做的是首先在不同的端口上监听您的服务。如果您无法更改,您可能需要为 URL 使用不同的端口

但是无论您的系统内部运行什么服务,您都可以使用 nginx 作为反向代理将其暴露给外部,请在您的配置中添加以下内容。

server {
    listen 1000;  # External port which others will see
    server_name your_domain.com;  # Replace with your domain or server IP

    location / {
        proxy_pass http://127.0.0.1:2000;  # Internal port, must not be same as external
        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;
    }
}

相关内容