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/