我刚刚使用 将 Ubuntu 16.04 服务器更新到 18.04。Nginxsudo do-release-upgrade
是 Web 服务器。网站报告 404。在安装过程中,我选择保留当前安装的版本。
$ ps aux | grep nginx
root 1477 0.0 0.0 141120 1568 ? Ss 06:36 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 1478 0.0 0.2 143752 6160 ? S 06:36 0:00 nginx: worker process
www-data 1479 0.0 0.2 143752 6160 ? S 06:36 0:00 nginx: worker process
Nginx 正在运行该文件,/etc/nginx/sites-available/default
其配置与原先一样。
PHP 也正在运行:
$ ps aux | grep php
root 1319 0.0 0.5 290448 17208 ? Ss 06:36 0:00 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
www-data 1486 0.0 0.2 292744 7464 ? S 06:36 0:00 php-fpm: pool www
www-data 1487 0.0 0.2 292744 7464 ? S 06:36 0:00 php-fpm: pool www
当我使用完整的 URL 导航到网页内容(例如文本、pdf 或图像)时,会显示内容。但当我键入脚本名称或网页名称时,会出现 404。
查看错误日志:
$ sudo tail -n 20 /var/log/nginx/error.log
2020/03/22 06:37:21 [crit] 1478#1478: *2 connect() to unix:/run/php/php7.0-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 141.114.192.156, server: DomainName, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "192.168.1.104"
(更改了 IP,并在 DomainName 部分写入)也许服务器正在寻找错误的 php 版本?
$ php --version
PHP 7.2.24-0ubuntu0.18.04.3 (cli) (built: Feb 11 2020 15:55:52) ( NTS )
Copyright (c) 1997-2018 The PHP Group
所以我意识到该文件/etc/nginx/sites-available/default
指向了错误的 php 版本。好吧,我将其从 php7.0 更改为 php7.2。现在我收到网页“拒绝访问”的提示。这是我的“默认”设置:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /home/user/public_html;
index index.php index.html index.htm;
server_name server.name.omited.org;
location / {
try_files $uri $uri/ =404;
autoindex on;
}
error_page 404 /404.html;
error_page 500 502 503 504 /404.html;
location = /50x.html {
root /home/user/public_html;
}
location ~ \.php$|\.html|\.htm {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
好的,我取得了一点进展,意识到 php7 是错误的版本,然后我意识到我还必须在服务器上启用 php7.2。
sudo systemctl enable php7.2-fpm
对于所有 html 网页,我仍然无法访问,但是,直接访问 php 网页时,将显示正确的内容。
我修改security.limit_extensions = .php .html
了/etc/php/7.0/fpm/pool.d/www.conf
正如这里建议的那样:现在出现了索引页,html 和 php 脚本都可以正常工作。到其他页面的链接均不起作用,所有链接仍然显示“拒绝访问”,
然后我意识到有 .htm 页面。
答案1
好的,我明白了。松了一口气!
当我更新(运行sudo do-release-upgrade
)时,我保留了已安装的 NGINX 版本,我以为我会得到类似的保留或升级 php7.0 的提议。但事实并非如此。升级完成后,php7.0 发生了一些事情,导致其无法使用。
我必须修改一些文件才能使服务器再次运行。我编辑的文件是:
/etc/nginx/sites-available/default
/etc/php/7.2/fpm/pool.d/www.conf
我运行sudo apt install php7.2 php7.2-fpm php-common php7.2-cli php7.2-common php7.2-json php7.2-opcache
更新 php7.2。它确实升级到了 php7.2。在执行此步骤之前,服务器报告了一个 php7.2 版本,但它不起作用,所以我还是升级了它。
然后我修改了我的/etc/nginx/sites-available/default
文件以包含该行:
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
这将 nginx 指向我现在安装的 php 版本。
然后,我运行
sudo systemctl enable php7.2-fpm
sudo systemctl start php7.2-fpm
以启用 php7.2,并启动它。
Php 脚本现在可以运行,但只有在直接访问时才能运行。嵌入 php 的 html 和 htm 页面在此步骤仍无法工作。
我使用以下命令测试了我的 nginx 配置文件:
sudo nginx -t sudo systemctl reload nginx
nginx 配置文件没有错误。但在此步骤中,htm 和 html 页面仍然显示“拒绝访问”。
接下来我修改了第 389 行/etc/php/7.2/fpm/pool.d/www.conf
以包含以下行:security.limit_extensions = .php .html .htm
然后我重新启动了php7.2:
sudo systemctl restart php7.2-fpm.service
此时,服务器的行为与我预期的一样:php 脚本渲染 html 页面组件、htm 和 html 文件正确渲染。
此后,我的服务器正常运行
答案2
您能否创建一个 phpinfo 文件来查看 php 是否被正确解析?
<?php // Show all information, defaults to INFO_ALL phpinfo();
您是否重新启动/重新加载了 php-fpm?