最近我安装了最新版本的Nginx,看起来我很难用它运行PHP.
这是我用于域的配置文件:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)
}
这是我在错误日志文件中得到的错误:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
Run Code Online (Sandbox Code Playgroud)
小智 65
尝试另一个*fastcgi_param*之类的东西
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
dog*_*nic 42
我有"找不到文件"的问题,所以我将"根"定义移到"服务器"括号中,为所有位置提供默认值.您可以通过提供任何自己的根位置来覆盖它.
server {
root /usr/share/nginx/www;
location / {
#root /usr/share/nginx/www;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以在我的两个位置定义root.
Ole*_*man 11
可能现在回答已经太晚了,但有几件事,因为这是一个非常烦人的错误.以下解决方案适用于Mac OS X Yosemite.
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
快速cgi参数的包含应该高于该行.
您正在执行的PHP文件的所有目录(包括该文件)都应具有a+x
权限,例如
Run Code Online (Sandbox Code Playgroud)sudo chmod a+x /Users/ sudo chmod a+x /Users/oleg/ sudo chmod a+x /Users/oleg/www/ sudo chmod a+x /Users/oleg/www/a.php
Pab*_*ara 10
我一直有同样的问题,在我的测试中,我遇到了两个问题:
1º:“找不到文件”
和
2º:404 错误页面
我发现,就我而言:
我必须在 Nginx 卷和 PHP 卷上为我的公共文件夹安装卷。
如果它安装在Nginx 中并且没有安装在PHP 中,它会给出:“找不到文件”
示例(将显示“找不到文件错误”):
services:
php-fpm:
build:
context: ./docker/php-fpm
nginx:
build:
context: ./docker/nginx
volumes:
#Nginx Global Configurations
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d/:/etc/nginx/conf.d
#Nginx Configurations for you Sites:
# - Nginx Server block
- ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
# - Copy Public Folder:
- ./sites/example.com/root/public/:/var/www/example.com/public
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
restart: always
Run Code Online (Sandbox Code Playgroud)
如果它安装在PHP 中并且未安装在Nginx 中,它将给出404 Page Not Found 错误。
示例(会抛出 404 Page Not Found 错误):
version: '3'
services:
php-fpm:
build:
context: ./docker/php-fpm
volumes:
- ./sites/example.com/root/public/:/var/www/example.com/public
nginx:
build:
context: ./docker/nginx
volumes:
#Nginx Global Configurations
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d/:/etc/nginx/conf.d
#Nginx Configurations for you Sites:
# - Nginx Server block
- ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
restart: always
Run Code Online (Sandbox Code Playgroud)
而这会工作得很好(安装在两侧)(假设一切良好配置,你就面临着同样的问题,因为我):
version: '3'
services:
php-fpm:
build:
context: ./docker/php-fpm
volumes:
# Mount PHP for Public Folder
- ./sites/example.com/root/public/:/var/www/example.com/public
nginx:
build:
context: ./docker/nginx
volumes:
#Nginx Global Configurations
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d/:/etc/nginx/conf.d
#Nginx Configurations for you Sites:
# - Nginx Server block
- ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
# - Copy Public Folder:
- ./sites/example.com/root/public/:/var/www/example.com/public
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
restart: always
Run Code Online (Sandbox Code Playgroud)
这里还有一个使用 Nginx/Php 的完整工作示例项目,用于为多个站点提供服务:https : //github.com/Pablo-Camara/simple-multi-site-docker-compose-nginx-alpine-php-fpm-alpine-https -ssl-证书
我希望这对某人有所帮助,如果有人对此了解更多,请告诉我,谢谢!