moodle 上的 Nginx 代理错误-重定向过多

moodle 上的 Nginx 代理错误-重定向过多

我最近正在学习 Nginx 上的代理缓存和负载平衡,并且在尝试使代理为我拥有的 moodle 安装工作时遇到了一些问题,每当我将代理放在 moodle 上时,它都会显示“重定向太多”,但它对我服务器上的其他类型的站点运行良好。

据我所知,要创建代理,我需要在 nginx 上创建一个新块,将我的域信息放在上面,然后将代理配置放在上面,例如服务器标记之前的上游和位置标记上的 proxy_pass (我没有编辑 nginx 上的默认文件,我创建了一个名为 cache.conf 的新文件,默认值没有更改):

#nano cache.conf

upstream origin_server {
    server 127.0.0.1:8000;
}

server {

    server_name mysite.com www.mysite.com;

    location / {
            include proxy_params;
            proxy_pass http://origin_server;
            proxy_cache custom_cache;
            proxy_cache_valid any 10m;
            add_header X-Proxy-Cache $upstream_cache_status;

            proxy_cache_key "$host$request_uri$cookie_user";
            proxy_cache_min_uses 3;

    }



listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


 }

server {
if ($host = www.mysite.com) {
    return 301 https://$host$request_uri;
} # managed by Certbot


if ($host = mysite.com) {
    return 301 https://$host$request_uri;
} # managed by Certbot



    listen 80;
    server_name mysite.com www.mysite.com;
return 404; # managed by Certbot
}

然后在我的主站点上我删除了域信息,只留下一个 _ 作为服务器名称并让它监听端口 8000(就像代理块文件上的上游标记一样)这样代理就会指向主站点:

#nano mysite.conf
server {

    listen 8000;
    listen [::]:8000;

    root /var/www/mysite.com/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name _;

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

    location ~ [^/]\.php(/|$) {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php8.0-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
            expires 365d;
    }

 }

使用此配置,任何 .html 文件都可以正常工作,它可以正常加载,但是对于 moodle 来说它根本不起作用,它总是返回“重定向过多”错误,即使在我的 moodle 上的 config.php 文件中,$CFG->wwwroot 具有与代理相同的域,而且,代理和主站点在同一台服务器上,我只是想在购买新服务器之前了解代理,以使代理指向另一台服务器并开始在两者之间进行负载平衡。

我如何让 moodle 与代理一起工作?

编辑:我忘了提到,只要我从代理中删除 SSL 配置,moodle 就会工作,如果我将配置放在 cache.conf 文件上,如下所示:

#nano cache.conf

upstream origin_server {
    server 127.0.0.1:8000;
}

server {

    listen 80;
    server_name mysite.com www.mysite.com;

    location / {
            include proxy_params;
            proxy_pass http://origin_server;
            proxy_cache custom_cache;
            proxy_cache_valid any 10m;
            add_header X-Proxy-Cache $upstream_cache_status;

            proxy_cache_key "$host$request_uri$cookie_user";
            proxy_cache_min_uses 3;
    }


}

Moodle 运行良好,可能是 SSL 配置问题。

答案1

转到 moodle 主目录中的 config.php 文件,验证 $CFG->wwwroot 是否有 https,然后在文件末尾添加 $CFG->sslproxy = true;。

docs.moodle.org 上有一篇文章教如何创建服务器集群,其中说,每当 ssl 来自拥有站点名称的负载均衡器(某种程度上的代理)时,moodle 需要在 config.php 上具有 $CFG->sslproxy,这样它就可以识别 ssl 证书。

文章链接: https://docs.moodle.org/403/en/Server_cluster

相关内容