从源代码编译的 Nginx 和来自官方 Fedora 存储库的 Nginx 存在奇怪的问题

从源代码编译的 Nginx 和来自官方 Fedora 存储库的 Nginx 存在奇怪的问题

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/

相关内容