Nginx仅在URL中包含.php时才下载PHP文件


8

我知道这是一个很普遍的问题,但我还没有人遇到类似的问题。只要.php扩展名不在URL中,我就可以提供PHP文件。例如:

如果我去,localhost我得到了我的index.php文件。如果我去localhost/index.php下载文件。这是我的配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #   proxy_pass http://127.0.0.1:8080;    
    #}

    error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny all;
    }
}

我对此问题感到非常困惑,我想知道是否有人对此事有经验。


您还可以发布您的帖子php.ini吗?
kraxor 2014年

Answers:


4

如果有时这是可行的(因此您知道PHP-FPM已经启动并且可以正常工作),那么我会很好地解决这是nginx问题。我对您的PHP位置块中的一些规则感到怀疑。它们可能破坏了某些URL,导致nginx转储。

您只需要两行即可捕获目录索引:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
}

将该位置剥离到该位置,重新加载nginx并查看会发生什么。

如果您需要重写(Wordpress中的漂亮URL等),则需要添加类似的内容

location / {
        try_files $uri $uri/ /index.php?$args;
}

但是只有在标准网址正常工作后,才可以这样做。


2
我进行了更改,起初它没有用。然后,我在浏览器上删除了缓存,然后缓存起作用了。感谢您的时间!:)
Mathew 2014年

1

有同样的问题,但是,我也需要这条线

include fastcgi.conf;

我也有

location ~* .+ {..}

并且必须确保它在定位之后 ~ \.php$ {..}


1
有趣的include fastcgi.conf;是,它与几乎所有用户都一样,include fastcgi_params;但是还包括fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;一些用户,include fastcgi_params;而不是.conf手动将其包含在其站点配置中。
LiveWireBT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.