2014-12-03 175 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

相關問題