我正在Droplet(Digital Ocean)中安装一个网站。我有一个问题,正确安装NGINX与PHP。我做了一个教程https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04,但当我尝试运行一些.php文件时,它只是下载它...
例如... http://5.101.99.123/info.php
它正在工作但是...如果我去主http://5.101.99.123
它下载我的index.php:/
有什么想法吗?
-rw-r--r-- 1 agitar_user www-data 418 Jul 31 18:27 index.php
-rw-r--r-- 1 agitar_user www-data 21 Aug 31 11:20 info.php
我的/ etc / nginx / sites-available / default
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/html;
index index.html index.htm index.php;
# Make site accessible from http://localhost/
server_name agitarycompartir.com;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location / {
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
... 其他"位置"被评论(#)
答案 0 :(得分:108)
试试这个:
/etc/nginx/sites-available/default
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default_server ipv6only=on; ## listen for ipv6
server_name
# Make site accessible (...)
server_name localhost;
index.php
添加到index
行root /usr/share/nginx/www;
index index.php index.html index.htm;
location ~ \.php$ {}
# pass the PHP scripts to FastCGI server listening on (...)
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
/etc/php5/fpm/php.ini
并确保cgi.fix_pathinfo
设置为0
sudo service nginx restart && sudo service php5-fpm restart
我刚刚开始使用Linux一周前,所以我真的希望能帮到你。我正在使用nano文本编辑器来编辑文件。如果没有,请运行apt-get install nano。谷歌就此了解更多。
答案 1 :(得分:39)
你需要将它添加到/ etc / nginx / sites-enabled / default以在Nginx服务器上执行php文件:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
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;
}
}
答案 2 :(得分:24)
我有类似的问题,通过清空浏览器缓存解决了(也可以在不同浏览器下正常工作)。
答案 3 :(得分:11)
更新nginx配置/ etc / nginx / sites-available / default或您的配置文件
如果您使用的是php7,请使用此
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
如果您使用的是php5,请使用此
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
访问此处以获取完整的详细信息Detail here
答案 4 :(得分:7)
我有同样的问题,没有一个答案解决了这个问题。
我跑了:
sudo nginx -t
在/ etc / nginx / sites-available / default测试配置文件。
它给了我这些错误:
nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/sites-enabled/default:115
nginx: configuration file /etc/nginx/nginx.conf test failed
所以我进入了配置文件,最后一行是
#}
我取消注释,再次运行测试命令并且有效
答案 5 :(得分:6)
这适合我。
1)MyApp文件
vi / etc / nginx / sites-available / myApp
server {
listen 80;
listen [::]:80;
root /var/www/myApp;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
PHP5用户
更改
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
到
fastcgi_pass unix:/var/run/php5-fpm.sock;
2)配置cgi.fix_pathinfo
将cgi.fix_pathinfo设置为0
位置:
PHP5 /etc/php5/fpm/php.ini
PHP7 /etc/php/7.0/fpm/php.ini
3)重启服务
FPM
php5 sudo service php5-fpm restart
php7 sudo service php7.0-fpm restart
NGINX
sudo service nginx restart
答案 6 :(得分:4)
我在上面看到了很多解决方案,许多解决方案对我来说都是正确的,但是我不明白他们在做什么,并且担心只是复制粘贴代码,尤其是 fastcgi 。这是我的2美分,
对于某些服务器(如Apache),内置了解释PHP的支持,因此不需要CGI。
This digital ocean link,解释了很好安装FPM的步骤,由于其他答案我都还不错,因此我没有编写解决php文件下载而不是渲染的问题所需的步骤。
答案 7 :(得分:3)
如果任何建议的答案无效,请尝试:
listen = 127.0.0.1:9000;(delete all line contain listen= )
remove server block server{} (if exist) in block html{} because we use server{} in default (config file in etc/nginx/site-available) which was included in nginx.conf.
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
sudo service nginx restart
service php5-fpm restart
在/ usr / share / nginx / html中创建任何php文件并在“server_name / file_name.php”中运行 (server_name取决于您的配置,normaly是localhost,file_name.php是在/ usr / share / nginx / html中创建的文件的名称。)
我正在使用Ubuntu 14.04
答案 8 :(得分:3)
对我而言,它有助于在/index.php末尾添加?$query_string
,如下所示:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
答案 9 :(得分:2)
上面的答案似乎对我达成的解决方案评论太多了。这就是我的文件:
的/ etc / nginx的/位点可用/默认
location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
希望这可以帮助一些在周日下午感到沮丧的人(c:
答案 10 :(得分:1)
对于任何遇到与PHP 7相同问题的人来说,这就是我在CentOS 7中正确执行php文件所做的工作,如果有人遇到同样的问题,请点击这里:
打开/etc/nginx/conf.d/default.conf
(默认情况下,我没有网站启用,也没有网站可用,您可以相应地进行编辑)。
编辑location
参数,如下所示:
default.conf :
location ~ \.php$ {
try_files $uri =404;
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
#instruct nginx execute php7 files instead download them :D
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
重新启动Nginx和PHP服务sudo systemctl restart php-fpm
和sudo systemctl restart nginx
。
最后但最重要的是,清除浏览器缓存或在incognito (Chrome)
或Private Browsing (Firefox)
等中运行...
希望这个有用且快乐的编码
答案 11 :(得分:1)
我的解决方案是添加
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
到我的自定义配置文件,例如etc/nginx/sites-available/example.com.conf
添加到/etc/nginx/sites-available/default
对我没用。
答案 12 :(得分:1)
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/html;
index index.php index.html index.htm;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
以上代码段对我来说适用于php7.2
答案 13 :(得分:1)
我现在用以下代码(更改您的IP)解决了我的问题:
location / {
access_log off;
log_not_found off;
client_max_body_size 2000m;
client_body_buffer_size 512k;
proxy_buffering on;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_buffer_size 64k;
proxy_buffers 32 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_connect_timeout 300s;
proxy_http_version 1.1;
proxy_set_header Range "";
proxy_pass https://123.123.123.123:444;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
答案 14 :(得分:1)
我的情况不是使用/etc/nginx/sites-available/default
,而是使用其他服务器块配置文件(例如example.com),而解决此问题的唯一方法是删除默认服务器块配置文件符号链接:
$ rm /etc/nginx/sites-enabled/default
然后重新加载Nginx:
$ sudo systemctl reload nginx
答案 15 :(得分:0)
要检查的另一件事:如果在之前设置了PHP,则设置了PHP –我使用了certbot –您需要在/ etc / nginx / sites中进行更改-可用/默认两次,因为将有两个服务器块(一个监听端口80,另一个监听端口443)。
(我主要是为电子邮件设置此服务器,而当我第一次安装nginx只是为了更轻松地运行certbot时,对PHP没有任何用。)
答案 16 :(得分:0)
我在这个问题上挣扎了很长时间,这些步骤对我有用。
第 1 步:所有 PHP 文件的位置块配置
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
第 2 步:在配置文件中添加 fastcgi_param 我们只需要打开 /etc/nginx/fastcgi_params 文件并在文件末尾添加以下行。
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
然后重启服务,
systemctl restart php7.3-fpm
systemctl restart nginx
答案 17 :(得分:0)
作记录,我发现我的php-fpm没有运行,我用service php7.2-fpm stop
修复了它
答案 18 :(得分:0)
因此,在我看来,这正是罪魁祸首的重写规则
我如下更改了nginx重写规则。
location /vendors { rewrite ^/vendors/?$ /vendors.php break; }
成为...
location /vendors { rewrite ^/vendors/?$ /vendors.php last; }
显然没有 last 关键字,该请求没有重新启动,因此它从未到达.php
位置段,而被简单地解释为下载–
答案 19 :(得分:0)
我遇到了同样的问题,解决了这个问题:如果您的CSS没有加载问题,那么此服务器块也将这个块放在其他位置块之上。我将其添加到站点可用的conf文件中。
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
答案 20 :(得分:0)
我正要设法解决此问题,对我来说,问题是Cloudflare缓存了php文件并一直让我下载它。
对我来说,解决方法是清除Cloudflare上的缓存。
答案 21 :(得分:0)
对我而言,这是一条线: fastcgi_pass unix:/var/run/php5-fpm.sock;
必须是: fastcgi_pass unix:/run/php5-fpm.sock;
答案 22 :(得分:0)
首先,您必须在浏览器中
Remove cache
然后打开终端并运行以下命令:
sudo apt-get install php-gettext
sudo nano /etc/nginx/sites-available/default
然后在default
文件中添加以下代码:
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 localhost;
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 ~ \.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;
}
}
如果有任何不匹配只是纠正并通过以下命令从终端重新启动Nginx
sudo systemctl restart nginx
然后去浏览器享受......
答案 23 :(得分:0)
检查你的nginx配置文件扩展名为* .conf。
例如:/etc/nginx/conf.d/myfoo.conf
我遇到了同样的情况。在将我的配置文件从myfoo重命名为myfoo.conf之后,它已修复。 不要忘记在重命名后重启nginx。
答案 24 :(得分:0)
如果其他任何事情对你没有帮助。也许早些时候你用info.php测试文件安装了apache2。只需清除localhost的App Data(缓存,cookie)即可。
答案 25 :(得分:0)
取消注释/ etc / nginx / sites-available / default中的.php位置
sudo vi / etc / nginx / sites-available / default:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
答案 26 :(得分:0)
Ubuntu 16.04对我有用,而php7正在删除这一行
fastcgi_split_path_info ^(.+\.php)(/.+)$;
之后它停止下载php文件。