從原始碼編譯的 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(我使用上述給定配置從原始程式碼編譯的那個)以透過 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 的網頁內容

Nginx(來自官方 Fedora 儲存庫)

  • 預設安裝,通常是/usr/sbin/nginx
  • 提供來自 /usr/share/nginx/html/ 的內容

答案1

終於解決了。

SELinux 禁止 PHP-FPM 存取該文件,因為 Web 內容是從 /srv 提供的。

運行以下命令

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/

相關內容