nginx 反代与根目录 PHP 共存

2020-10-03 22:07:03 +08:00
 Backlitz

错误信息: 在 nginx 的一个 vhost 配置中,在根目录放置 index.php 文件,并为子目录设置反代,直接访问域名时返回 nginx403,需手动添加 index.php 方可正常访问 php 。

猜测原因: 在使用 nginx 反代时,将反代设置为子目录,location 使用直接匹配。 而引入 php 配置时使用正则匹配。 直接匹配优先级高于正则匹配。

配置文件示例:

server {
    listen 443 ssl http2;
    server_name domain_name;
    root /home/www;
    index index.php;
    
    #ssl 配置略去
    
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    }

    location /deluge/ {
        proxy_pass http://localhost:8112/;
        proxy_set_header X-Deluge-Base "/deluge/";
        add_header X-Frame-Options SAMEORIGIN;
    }
}

尝试解决: 将 location ~ \.php$ { 修改为强制匹配 location = / { 在 location 模块中使用 alias 指向绝对目录

    location = / {
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        index index.php
        alias /home/www;
    }

访问网页,返回纯文本内容 File not found.

已知在不设置子目录反代时,该配置 php 可正常访问。

请问是否有办法解决这个问题?

2164 次点击
所在节点    NGINX
1 条回复
masker
2020-10-04 10:27:09 +08:00
建议学会自己动手找 谷歌 and 看相应日志

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/712414

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX