AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1804279
Accepted
Gianluca
Gianluca
Asked: 2023-08-16 02:51:11 +0800 CST2023-08-16 02:51:11 +0800 CST 2023-08-16 02:51:11 +0800 CST

Nginx-proxy 似乎忽略服务器上下文

  • 772

前提

在过去的几天里,我设置了一个使用 Docker 运行 Mastodon 的家庭服务器。我已经有一个在 Raspberry 上运行的 Nextcloud 实例,所以现在我尝试通过专用子域(我正在使用免费的 DDNS)使这两个实例可用。

我设置了两个子域(都明显指向我的家庭路由器),如下所示:

  • 乳齿象.example.com
  • nextcloud.example.com

然后,我在路由器中设置端口转发,将端口 80、443 上的 TCP/UDP 流量发送到 Mastodon 服务器的相同端口,而自定义端口 3000、3001 上的 TCP/UDP 流量则映射到 Nexcloud 的端口 80、443服务器。

到这里为止都没有问题,如果我https://mastodon.example.com在浏览器中输入内容,我就会进入 Mastodon 服务器,然后https://nextcloud.example.com:3001我就会进入 Nextcloud 服务器。

问题

现在我正在尝试编辑 mastodon 服务器中 nginx-proxy 容器的配置,以便重定向每个请求,以避免nextcloud.example.com必须nextcloud.example.com:3001指定端口。

myadditions.conf我在映射到容器卷的文件夹中创建了一个新文件/etc/nginx/conf.d,重新启动服务器后,我可以确认 nginx 已正确加载它docker exec nginx-proxy nginx -T。

我的问题是,我尝试放入文件中进行重定向的所有内容似乎都被忽略,我输入时得到的结果始终nextcloud.example.com相同:错误MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT(我使用的是 Firefox)。我认为该错误是因为服务器没有尝试重定向调用,因此它提供的证书与 nextcloud 子域不匹配。我有什么遗漏的吗?

目前我的myadditions.conf文件如下所示:

server {
    server_name nextcloud.example.com;
    return 301 $scheme://nextcloud.example.com:3001$request_uri;
}

但我尝试了很多设置,结果没有任何变化,所以我开始认为问题不在于我在文件中写入的内容。顺便说一句,如果我删除我的文件,错误也是一样的。

proxy
  • 2 2 个回答
  • 28 Views

2 个回答

  • Voted
  1. Gianluca
    2023-08-17T06:21:08+08:002023-08-17T06:21:08+08:00

    以下是我为解决问题所采取的步骤。

    1. 获取附加证书

    我创建了一个letsencrypt_user_data文件并将其映射到nginxproxy/acme-companion容器,以指示它请求并不断更新nextcloud.example.com子域的附加证书(请参阅容器文档中的独立证书)。这是我现在的文件:

    LETSENCRYPT_STANDALONE_CERTS=('NextCloudCert')
    
    LETSENCRYPT_NextCloudCert_HOST=('nextcloud.example.com')
    LETSENCRYPT_NextCloudCert_EMAIL='[email protected]'
    LETSENCRYPT_NextCloudCert_TEST=false
    

    2.更正nginx重定向

    我编辑了myadditions.conf在 Nginx 配置文件夹中创建的文件:我将重定向类型从 更改为return 301,proxy_pass并添加了一个server上下文来重定向指定新证书的端口 443 上的流量。这就是文件现在的样子,请记住,我刚刚复制并编辑了它,它可以工作,但我并不真正知道它包含的大部分内容的含义,因此这可能是一个不好的例子:

    log_format logFormatNextcloud '$host $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$upstream_addr"';
    
    server {
        server_name nextcloud.example.com;
        listen 80 ;
        access_log /var/log/nginx/access.log logFormatNextcloud;
        # Do not HTTPS redirect Let's Encrypt ACME challenge
        location ^~ /.well-known/acme-challenge/ {
            auth_basic off;
            auth_request off;
            allow all;
            root /usr/share/nginx/html;
            try_files $uri =404;
            break;
        }
        location / {
            return 301 https://$host$request_uri;
        }
    }
    server {
        server_name nextcloud.example.com;
        access_log /var/log/nginx/access.log logFormatNextcloud;
        listen 443 ssl http2 ;
        ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        ssl_certificate /etc/nginx/certs/nextcloud.example.com.crt;
        ssl_certificate_key /etc/nginx/certs/nextcloud.example.com.key;
        ssl_dhparam /etc/nginx/certs/nextcloud.example.com.dhparam.pem;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/nginx/certs/nextcloud.example.com.chain.pem;
        set $sts_header "";
        if ($https) {
            set $sts_header "max-age=31536000";
        }
        add_header Strict-Transport-Security $sts_header always;
        include /etc/nginx/vhost.d/default;
        location / {
            proxy_pass https://nextcloud.example.com:3001;
            set $upstream_keepalive false;
        }
    }
    

    现在两个子域都可以工作。谢谢@u1686_grawity,你的回答包含了我需要的所有提示和解释。

    • 1
  2. Best Answer
    u1686_grawity
    2023-08-16T04:19:49+08:002023-08-16T04:19:49+08:00

    您正在连接到 HTTPS URL,因此必须为该域的 HTTPS 设置应答服务器- 它不能在没有完全建立 TLS 连接的情况下仅提供纯文本重定向。(如果浏览器允许这样做,那么攻击者就很容易做同样的事情。)

    您的服务器块没有指定它将侦听 TLS 端口,也没有定义任何证书,因此它甚至可能不会被选择用于请求 - Nginx 最终选择第一个标记为支持 TLS 的服务器块,并且使用那里定义的任何证书。

    请记住,30x重定向是客户端的——服务器仅返回新的 URL,客户端即可访问该 URL。您不需要输入非标准端口,但它会在地址栏中可见;nginx-proxy 容器实际上不会执行任何代理。

    如果您想要代理,那么您需要使用proxy_pass而不是return. 在这种情况下,Nginx 仍然需要有效的 HTTPS 设置。

    Nginx 在无法访问域的匹配证书的情况下处理此问题的唯一另一种方法是根据通过 TLS SNI 报告的主机名“盲目”代理所有数据(流代理模式),以便浏览器与以下命令进行 HTTPS 握手:而是后端服务器。我不确定 Nginx 是否具有该功能,尽管还有其他代理具有该功能。

    • 0

相关问题

  • 脚本在哪里以代理模式运行?

  • 如何在 Windows 10 中禁用除 IE 之外的所有应用程序的全局代理设置

  • 如何在 Windows 7 中获取实际的代理凭据?

  • 用户使用 FileZilla 连接到 SFTP 服务器拒绝连接

  • 如何强制chrome在macos中使用pac文件?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve