如何使用 Nginx 提供 Autodiscover.xml

如何使用 Nginx 提供 Autodiscover.xml

我正在尝试使用 Nginx 提供 Autodiscover.xml 文件:

以下是我的配置:

上游自动发现示例couk后端{
        服务器 unix:/var/run/php-fcgi-autodiscoverexamplecouk.sock;
}

服务器 {
        听80;
        听443 ssl;

        ssl_certificate /etc/letsencrypt/live/autodiscover.example.co.uk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/autodiscover.example.co.uk/privkey.pem;

        服务器名称自动发现.example.co.uk;
        根/var/www/vhosts/autodiscover.example.co.uk/htdocs;

        索引 索引.html;

        错误日志/var/www/vhosts/autodiscover.example.co.uk/error.log;
        access_log /var/www/vhosts/autodiscover.example.co.uk/access.log 合并;

        #位置 ^~ /自动发现/ {
                #索引自动发现.php;
                #rewrite ^/.*$ /autodiscover.php 最后;
        #}

        位置 ~* /自动发现/ {
                最后重写 ^/autodiscover/autodiscover\.xml$ /autodiscover/autodiscover.php;
        }

        位置 = /robots.txt {
                允许全部;
                log_not_found关闭;
                访问登录关闭;
        }

        位置 ~ \.php$ {
                尝试文件$uri =404;
                包括/etc/nginx/fastcgi_params;
                fastcgi_pass autodiscoverexamplecouk后端;
                fastcgi_index索引.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;
                fastcgi_intercept_errors开启;
        }
}

问题是,当使用大写字母 A 请求时,它无法提供 Autodiscover.xml 文件

如果有人能提供帮助那就太好了。

当请求 Autodiscover.xml 时,它应该将其重定向到 autodiscover.php,后者将返回 .autodisocver.xml。这样做是为了能够为不同的域提供服务。

该文件位于 /autodiscover/autodiscover.php

Nginx 错误日志:

2017/01/25 21:34:12 [错误] 29385#29385:*93 open()“/var/www/vhosts/autodiscover.example.co.uk/htdocs/Autodiscover/Autodiscover.xml”失败(2:没有此文件或目录),客户端:13.67.59.89,服务器:autodiscover.example.co.uk,请求:“POST /Autodiscover/Autodiscover.xml HTTP/1.1”,主机:“autodiscover.example.co.uk”
2017/01/25 21:34:13 [错误] 29385#29385:*94 open()“/var/www/vhosts/autodiscover.example.co.uk/htdocs/Autodiscover/Autodiscover.xml”失败(2:没有此文件或目录),客户端:13.67.59.89,服务器:autodiscover.example.co.uk,请求:“POST /Autodiscover/Autodiscover.xml HTTP/1.1”,主机:“autodiscover.example.co.uk”
2017/01/25 21:45:05 [错误] 29385#29385:*108 stat()“/var/www/vhosts/autodiscover.example.co.uk/htdocs/Autodiscover/Autodiscover.xml”失败(2:没有此文件或目录),客户端:13.67.59.89,服务器:autodiscover.example.co.uk,请求:“POST /Autodiscover/Autodiscover.xml HTTP/1.1”,主机:“autodiscover.example.co.uk”
2017/01/25 21:45:05 [错误] 29385#29385:*109 open()“/var/www/vhosts/autodiscover.example.co.uk/htdocs/Autodiscover/Autodiscover.xml”失败(2:没有此文件或目录),客户端:13.67.59.89,服务器:autodiscover.example.co.uk,请求:“POST /Autodiscover/Autodiscover.xml HTTP/1.1”,主机:“autodiscover.example.co.uk”
2017/01/25 21:56:15 [错误] 29485#29485:*121 open()“/var/www/vhosts/autodiscover.example.co.uk/htdocs/Autodiscover/Autodiscover.xml”失败(2:没有此文件或目录),客户端:13.67.59.89,服务器:autodiscover.example.co.uk,请求:“POST /Autodiscover/Autodiscover.xml HTTP/1.1”,主机:“autodiscover.example.co.uk”
2017/01/25 21:56:16 [错误] 29485#29485:*122 open()“/var/www/vhosts/autodiscover.example.co.uk/htdocs/Autodiscover/Autodiscover.xml”失败(2:没有此文件或目录),客户端:13.67.59.89,服务器:autodiscover.example.co.uk,请求:“POST /Autodiscover/Autodiscover.xml HTTP/1.1”,主机:“autodiscover.example.co.uk”

答案1

如果您的目标是将所有请求发送https://autodiscover.example.co.uk/autodiscover/Autodiscover.xml/var/www/vhosts/autodiscover.example.co.uk/htdocs/autodiscover/autodiscover.php,则可以使用以下location块:

location ~ /(?:a|A)utodiscover/Autodiscover.xml {
    try_files /autodiscover/autodiscover.php =404;
}

您的配置中的问题在于您在语句中使用小写版本rewrite,因此当收到首字母大写的请求时,没有匹配项。

相关内容