從原始碼編譯的 Nginx 和來自官方 Fedora 儲存庫的 Nginx 的奇怪問題
TL;DR Nginx,從原始碼編譯,在處理 .php 文件時遇到了問題,而使用相同的 PHP-FPM 配置,來自 Fedora 官方儲存庫的 nginx 在 DigitalOcean 512MB Fedora 21 x64 VPS 上工作就像一個魅力。背後的原因是什麼?
我在 Fedora 21 x64 VPS 上使用 DigitalOcean 512MB Droplet。
我從原始碼編譯 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/ 的內容
終於解決了。
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/