TL;DR 从源代码编译的 Nginx 在处理 .php 文件时遇到了麻烦,而使用相同的 PHP-FPM 配置,来自官方 Fedora 存储库的 nginx 在 DigitalOcean 512MB Fedora 21 x64 VPS 上运行良好。这背后的原因是什么?
我正在使用 DigitalOcean 512MB Droplet 和 Fedora 21 x64 VPS。
我从源代码编译了 Nginx,并将其安装在 /opt/nginx/ 中。以下是/opt/nginx/nginx -V
nginx version: nginx/1.7.10
built by gcc 4.9.2 20150212 (Red Hat 4.9.2-6) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx --sbin-path=/opt/nginx --without-http_autoindex_module --without-http_browser_module --without-http_empty_gif_module --without-http_geo_module --without-http_map_module --without-http_referer_module --without-http_scgi_module --without-http_split_clients_module --without-http_ssi_module --without-http_userid_module --without-http_uwsgi_module --with-http_gzip_static_module --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-openssl=openssl --with-pcre=pcre --with-zlib=zlib --with-ipv6
到目前为止,我仅使用它来提供静态页面。今天,我从官方 Fedora 存储库安装了 php-fpm,并配置了 nginx(我使用上面给出的配置从源代码编译的 nginx),以通过 unix 套接字将 .php 页面传递给 PHP-FPM。
不幸的是,我收到了No input file specified
错误。我以前遇到过这个问题,所以我知道该怎么做。我很快更改了文件权限,但仍然收到相同的错误。
经过几个小时的搜索并尝试了所有可能的解决方案后,我仍然收到相同的错误。我发现此主题分享同样的问题。
我想为什么不试试 Fedora 官方存储库中的 Nginx。我安装了它。停止了之前的 nginx(从源代码编译),/opt/nginx/nginx -s stop
并配置了新的 nginx(来自 Fedora 官方存储库),以将 .php 传递到 PHP-FPM 到相同的 unix 套接字。
而且它确实有效。
我的问题是“为什么 nginx(从源代码编译)处理 php 时会遇到麻烦,而来自官方 Fedora 存储库的 nginx 却运行正常?”这可能是 SELinux 造成的吗?
编辑:有关我的设置的更多信息。
Nginx(从源代码编译)
- 安装在/opt/nginx/
- 从 /srv 提供 Web 内容
Nginx(来自 Fedora 官方存储库)
- 默认安装,通常为 /usr/sbin/nginx
- 从 /usr/share/nginx/html/ 提供内容
答案1
终于解决了。
由于 Web 内容由 /srv 提供,因此 SELinux 禁止 PHP-FPM 访问该文件。
运行以下命令
sudo chcon -R -t httpd_sys_content_t /srv/
解决了这个问题。
谢谢大家的帮助。
参考:https://www.if-not-true-then-false.com/2011/install-nginx-php-fpm-on-fedora-centos-red-hat-rhel/