2014-12-03 138 views
0

这是过去两天的一场斗争。我做了很多搜索,找不到任何解决办法。Nginx PHP页面下载而不是显示

这里是我的nginx.conf:

user www-data; 
    worker_processes 4; 
    pid /run/nginx.pid; 

    events { 
      worker_connections 768; 
      # multi_accept on; 
    } 

    http { 

      ## 
      # Basic Settings 
      ## 

      sendfile on; 
      tcp_nopush on; 
      tcp_nodelay on; 
      keepalive_timeout 65; 
      types_hash_max_size 2048; 
      # server_tokens off; 

      # server_names_hash_bucket_size 64; 
      # server_name_in_redirect off; 

      include /etc/nginx/mime.types; 
      default_type application/octet-stream; 

      ## 
      # Logging Settings 
      ## 

      access_log /var/log/nginx/access.log; 
      error_log /var/log/nginx/error.log; 

      ## 
      # Gzip Settings 
      ## 

      gzip on; 
      gzip_disable "msie6"; 

      # gzip_vary on; 
      # gzip_proxied any; 
      # gzip_comp_level 6; 
      # gzip_buffers 16 8k; 
      # gzip_http_version 1.1; 
      # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 

      ## 
      # Virtual Host Configs 
      ## 

      include /etc/nginx/conf.d/*.conf; 
      include /etc/nginx/sites-enabled/*; 
    } 

这里是在/ etc/nginx的/我的默认文件站点启用-:

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

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

    server_name [redacted server IP]; 

    location/{ 
     try_files $uri $uri/ =404; 
    } 

    error_page 404 /404.html; 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 

    location ~ /admin/ { 
     auth_basic "Restricted"; 
     auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 


} 

将网页存储在/ usr /共享/ nginx的/ html/admin/index.php - 它提示输入用户名/密码(工作正常),但只要我登录,它就会下载而不是显示php网页。

如果我把'location〜/ admin /'块放在'location〜.php $'块之后,它可以工作,但是不会进行验证。

我在另一个文件夹中编写的脚本在调用'/usr/share/nginx/html/api/XXX.php'文件夹时会正常工作(它将插入到MySQL数据库中),但它只是返回JSON的东西。

你对我的帮助很大,我真的很感激。

+0

取消注释1行,它将起作用。 – r3wt 2014-12-03 20:47:35

+0

@ r3wt我试过了,没有运气。我将更改帖子中的代码以显示 – Skull1234567 2014-12-03 21:10:54

回答

4

您所评论的php5-fpm袜子,删除以下行的注释:

fastcgi_pass unix:/var/run/php5-fpm.sock; 

改变你的管理路径配置使用PHP5-FPM袜子:

location ~ /admin/.+\.php$ { 
    auth_basic "Restricted"; 
    auth_basic_user_file /etc/nginx/.htpasswd; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_index index.php; 
} 

或移动你的管理配置路径后~\.php$ {}规则 (都为我工作)

确保php5-fpm服务正在运行,并且您已重新启动nginx

sudo service php5-fpm restart && sudo service nginx restart 
+0

没有运气,我没有评论该行,保存,并运行您的命令(得到作为回应: php5-fpm停止/等待 php5- FPM开始/运行,过程20506 *重启nginx的nginx的 )你说的“确保在这个路径中的文件存在”是什么意思? – Skull1234567 2014-12-03 20:51:20

+1

您是否在access.log/error.log中收到任何错误? 'tail/var/log/nginx/error.log' || 'tail/var/log/nginx/access.log' – DanR 2014-12-03 20:53:54

+0

我打开错误日志,访问了页面(下载它),然后再次运行错误日志并注意到没有添加任何东西。我为访问日志做了同样的事情,它看起来很好(我现在只有一个页面,只有<?php phpinfo()?> - 排除任何与php代码有关的问题) – Skull1234567 2014-12-03 21:08:59

0

尝试将默认PHP块添加到您的conf中。

location ~ \.php$ { 
    fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
     if (!-f $document_root$fastcgi_script_name) { 
      return 404; 
    } 

    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    include fastcgi_params; 
} 

没有此块,预期的行为是显示该文件。您需要运行PHP FPM并将其配置为使其工作。说明可在http://wiki.nginx.org/PHPFcgiExample

+0

我试过了(注释掉位置块并将其插入/ sites-enabled/default文件中),但没有运气。我94%确定我的PHP FPM正在运行和配置 - 你知道我会如何检查吗?编辑:此外,这使得/api/XXX.php文件无用,所以我不得不恢复到我原来的版本 – Skull1234567 2014-12-03 20:44:44

+0

检查php-fpm是否正在运行'service php5-fpm status'。如果将php-fpm配置为侦听端口,则可以使用'netstat -ntaup | grep php'检查corrent端口和ip。如果这不返回任何内容,php-fpm正在侦听unix套接字。要检查这个运行'ls/var/run/php * sock'。 – Vilppu 2014-12-03 20:51:05

+0

服务正在运行:'php5-fpm启动/运行,进程20506'。运行“sudo netstat -ntaup | grep php”不会返回任何东西(这是一个远程服务器)。做'ls/var/run/php * sock'会得到回报:“/var/run/php5-fpm.sock” – Skull1234567 2014-12-03 20:55:21

相关问题