NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
Backlitz
V2EX  ›  NGINX

nginx 反代与根目录 PHP 共存

  •  
  •   Backlitz · Oct 3, 2020 · 3009 views
    This topic created in 2047 days ago, the information mentioned may be changed or developed.

    错误信息: 在 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 可正常访问。

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

    1 replies    2020-10-04 10:27:09 +08:00
    masker
        1
    masker  
       Oct 4, 2020 via Android
    建议学会自己动手找 谷歌 and 看相应日志
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3988 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 05:11 · PVG 13:11 · LAX 22:11 · JFK 01:11
    ♥ Do have faith in what you're doing.