Nextcloud 和 Pi-Hole 的 Nginx 配置

Nextcloud 和 Pi-Hole 的 Nginx 配置

我想对错误使用术语和对一切的误解表示道歉:D

上下文 :

我租用服务器有两个目的:

  • Nextcloud
  • Pi-Hole

我租用了一个域名“www.mydomain.com”,并将我的服务器的IP地址绑定到这个域名上。

Nextcloud 配置在端口 80 (HTTP) 和 443 (HTTPS) 上,而 Pi-Hole 配置在端口 81 上。因此,当我输入www.mydomain.com,我被直接重定向到我的 Nextcloud。要访问我的 Pi-Hole,我必须输入我的 IP 地址 XX.XXX.XXX.XXX:YY(其中 X 数字是 IP,Y 数字是端口)

问题是,我仅在 Nextcloud 界面上有 SSL,而在我的 Pi-Hole 的管理界面上没有。

因此我创建了一个子域名(仅用于 Pi-Hole):pihole.mydomain.com

因此经过一番研究,我发现了 Nginx,我想将其用作反向代理,在端口 80 上进行配置,然后从他将我的子域重定向到不同的服务(Nextcloud 和 Pi-Hole)。

但我很难设置 Nginx。当我输入我的 IP 地址或www.mydomain.com,我被正确重定向到 Nginx 欢迎页面。

我按照本教程设置了 Nginx:

https://www.linode.com/docs/guides/use-nginx-reverse-proxy/#configure-nginx

我在端口 81 和端口 444 上设置了我的 Nextcloud,在端口 82 上设置了我的 PiHole,因此我创建了一个 domain.conf 文件,在其中输入:  

#For nextcloud
server {
  listen 80;
  listen [::]:80;
  server_name mydomain.com;
  location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_pass http://XX.XXX.XXX.XXX:81/;
  }
}

#For Pi-Hole
server {
  listen 80;
  listen [::]:80;
  server_name pihole.mydomain.com;
  location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_pass http://XX.XXX.XXX.XXX:82/admin/;
  }
}

PS:我不太明白下面这一行的目的是什么:proxy_set_header X-Real-IP $remote_addr;

它完美地适用于 Pi-Hole。当我想访问它时,我只需输入:pihole.mydomain.com,一切就都顺利了。甚至浏览器顶部的地址也保持为 pihole.mydomain.com/XXX(根据我在管理界面中访问的页面)。

对于 Nextcloud,情况并非如此,我被重定向到 localhost:444。因此,我创建了第二个子域:nextcloud.myserver.com,并更改了 mydomain.conf 文件:

#For nextcloud
server {
  listen 80;
  listen [::]:80;
  server_name nextcloud.mydomain.com;
  location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_pass http://XX.XXX.XXX.XXX:81/;
  }
}

这次成功了,但是当我输入 nextcloud.mydomain.com 时,我确实访问了我的 Nextcloud,但是浏览器上的地址更改为 IP 地址,我希望它保留 nextcloud.mydomain.com 作为 Pi-Hole。但是该怎么做呢?  

还有 #1:我想直接使用地址 myserver.com 访问我的 Nextcloud。我不想必须输入 nextcloud.mydomain.com 才能访问它。

同样#2:我之前描述的所有内容在 Brave 和 Edge 上都能正常工作,但对于 Firefox,我在导航栏中输入的每个域或子域都会向我发送一个错误,例如:Firefox 找不到此域。

对于我做错的事情有什么建议吗?

感谢您花时间阅读我的文章!

答案1

由于主页已将您重定向到路径“/admin/”,因此正确的方法是检查路径并发出“return 302”以调整原始 URL 中显示的“location”。请参阅下面的示例。

Nginx 版本

Docker: nginx:1.25-alpine3.18
Nginx: 1.25

Pihole 原始网址:

http://192.168.29.2:8088/admin/

NextCloud 原始网址:

http://192.168.29.2:8080/

Pihole 的反向代理:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name ~^(dns).youdomain.com;

    client_max_body_size 50M;
    include ssl_config.config;

    location = / {
        return 302 https://$host/admin/;
    }

    location /admin/ {
        proxy_pass http://192.168.29.2:8088/admin/;
        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;
    }
}

对于 Nextcloud,您可以在 NGINX 中添加另一个块

Nextcloud 的反向代理:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name ~^(nextcloud).youdomain.com;

    client_max_body_size 50M;
    include ssl_config.config;

    location / {
        proxy_pass http://192.168.29.2: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;
    }
}

ssl_配置.config

    # SSL configuration
    ssl_certificate         /etc/nginx/certs/certificate.crt;
    ssl_certificate_key     /etc/nginx/certs/certificate.key;

    #ssl_protocols TLSv1.3 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-CHACHA20-POLY1305;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver_timeout 5s;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    ssl_dhparam /etc/nginx/certs/dhparam.pem;

    # Your server DNS here
    resolver 192.168.29.2;

相关内容