树莓派1B上Nginx服务器下载index.php而非执行的问题求助
解决Nginx下载PHP文件而非执行的问题
我在树莓派1B上搭建支持PHP的Nginx服务器,用来部署selfoss RSS阅读器。但访问网站时,index.php会被浏览器直接下载,而不是在服务器端执行。已经重启Nginx、清除浏览器缓存,问题依然存在。
环境信息
PHP版本
$ php -v PHP 7.4.30 (cli) (built: Jul 7 2022 15:51:43) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies
Nginx配置
server { server_name rss.getty.nz; root /var/www/rss.getty; access_log /var/www/rss.getty/rss.accesss.log; error_log /var/www/rss.getty/rss.error.log; index index.php; location / { try_files $uri /public/$uri /index.php$is_args$args =404; } location ~ \.php$ { include snippets/fastcgi-php.conf ; include fastcgi_params; fastcgi_pass unix:/run/php/php7.4-fpm.sock ; } location ~* \ (gif|jpg|png) { expires 30d; } location ~ ^/(favicons|thumbnails)/.*$ { try_files $uri /data/$uri; } location ~* ^/(data\/logs|data\/sqlite|config\.ini|\.ht) { deny all; } listen [::]:443 ssl; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/rss.getty.nz/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/rss.getty.nz/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 access_log /var/www/rss.getty/rss.accesss.log; error_log /var/www/rss.getty/rss.error.log; } server { if ($host = rss.getty.nz) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name rss.getty.nz; return 404; # managed by Certbot }
fastcgi-php.conf内容
# regex to split $uri to $fastcgi_script_name and $fastcgi_path fastcgi_split_path_info ^(.+?\.php)(/.*)$; # Check that the PHP script exists before passing it try_files $fastcgi_script_name =404; # Bypass the fact that try_files resets $fastcgi_path_info set $path_info $fastcgi_path_info; fastcgi_param PATH_INFO $path_info; fastcgi_index index.php; include fastcgi.conf;
排查与解决步骤
1. 确认PHP-FPM服务状态
先检查php7.4-fpm是否正常运行:
sudo systemctl status php7.4-fpm
如果未运行,启动并设置开机自启:
sudo systemctl start php7.4-fpm sudo systemctl enable php7.4-fpm
2. 检查Socket文件权限
确保Nginx有权访问PHP-FPM的Socket文件:
ls -l /run/php/php7.4-fpm.sock
正常情况下,文件所属组应为www-data(Nginx默认运行用户)。如果不符,编辑/etc/php/7.4/fpm/pool.d/www.conf,确保以下配置正确:
user = www-data group = www-data listen.owner = www-data listen.group = www-data
修改后重启php-fpm:
sudo systemctl restart php7.4-fpm
3. 修正Nginx正则错误
配置中存在明显的正则语法错误,会干扰location匹配:
# 错误写法 location ~* \ (gif|jpg|png) { # 修正为 location ~* \.(gif|jpg|png)$ {
4. 调整PHP请求匹配逻辑
确保PHP请求能被正确捕获,可将location ~ \.php$块移至所有location规则最前端,避免被其他规则拦截。同时调整根路径的try_files规则:
location / { try_files $uri $uri/ /public/$uri /index.php$is_args$args; }
5. 验证配置并重启Nginx
修改配置后先验证合法性:
sudo nginx -t
无错误则重启Nginx:
sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者Razorfoot
相关产品推荐
相关产品推荐

