![Nginx 下载 PHP 而不是执行](https://linux22.com/image/734192/Nginx%20%E4%B8%8B%E8%BD%BD%20PHP%20%E8%80%8C%E4%B8%8D%E6%98%AF%E6%89%A7%E8%A1%8C.png)
PHP 文件正在下载而不是执行,并且 mydomain.com 根目录出现 HTTP 403 Forbidden,表明索引指令未正确设置。
(抱歉,我知道这个问题已经被问过无数次了,但我觉得我已经尝试了我能找到的所有文章组合。)
Ubuntu 16.04,已安装 PHP FPM 7.2
以下是我使用的基本配置。为了清晰起见,我删除了尝试过的所有其他内容:
/etc/nginx/站点可用/默认
# Default server configuration
server {
listen 80 default_server;
listen [::]:80 default_server;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
/etc/nginx/sites-available/mydomain.com.conf
server {
server_name .mydomain.com;
listen 80;
listen [::]:80 ipv6only=on;
listen 443 default_server ssl;
listen [::]:443 ipv6only=on;
location / {
root /var/www/html/mydomain.com;
}
}
我注意到的一件事是,即使是全新安装,/run/php/php7.2-fpm.sock 的文件大小也为零。
答案1
nginx 何时下载 php 文件?如果在您访问主站点时发生这种情况mydomain.com/foo.php
,那是因为您的 php 配置应该位于主站点的server
块内,而不是默认server
块中。
因此这应该可行:
/etc/nginx/sites-available/mydomain.com.conf
server {
server_name .mydomain.com;
listen 80;
listen [::]:80 ipv6only=on;
listen 443 default_server ssl;
listen [::]:443 ipv6only=on;
# You need to add your SSL certs here
ssl_certificate /path/to/mydomain.com.crt;
ssl_certificate_key /path/to/mydomain.com.key;
ssl_dhparam /path/to/dhparam.pem;
root /var/www/html/mydomain.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
# Default server
server {
listen 80 default_server;
listen [::]:80 default_server;
return 401;
}
与最佳实践一样,默认服务器块应仅用作虚拟服务器块,以丢弃任何没有有效目的地(即域名,例如mydomain.com
)的请求。这意味着当有人请求myexample.com
并将 DNS 指向您的 nginx 服务器时,该人将遇到401
。