我想对错误使用术语和对一切的误解表示道歉: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 原始网址:
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;