我正在嘗試使 Nginx 作為 centos 7 伺服器上 Apache 的反向代理。
這是我到目前為止所做的:
為 Nginx 建立設定檔:奈米 /etc/nginx/conf.d/default.conf
server {
listen 80;
root /usr/share/nginx/html/;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
location ~ /\.ht {
deny all;
}
}
更改 2 行/etc/httpd/conf/httpd.conf:
Listen 127.0.0.1:8080
DocumentRoot "/usr/share/nginx/html/"
我在 /usr/share/nginx/html 中創建了一個名為 info.php 的文件,並將<?php infophp();?>
其放入其中,但是當我嘗試加載頁面時http://My_Ip/info.php我收到一個彈出視窗來下載文件,而我希望執行該文件。
我通過了這個命令httpd -M | grepphp 來查看我的 apache Web 伺服器中是否存在 Php 模組,並且我得到“php7_module(共用)”,所以我猜是的。
任何幫助將不勝感激,謝謝。
亨利
ps:當我繼續http://我的IP我得到預設的 Nginx 主頁 p.s2:對於那些詢問的人,我已經在 serverfault 上發布了相關問題(錯誤 403),但看來我不再有問題了(即如果我去看看http://My_IP/any_css_file.css例如,它顯示良好,沒有錯誤)
答案1
您需要在伺服器上執行 PHP FPM 執行個體才能執行 php 腳本。您可以透過運行來檢查
find / -type d -iname *fpm*
如果傳回一些結果,則它已經安裝。現在要找出它正在偵聽的連接埠/套接字,您可以執行:
find / -type d -iname *fpm* | xargs grep -r "^listen[= ]"
應該會回傳類似這樣的內容:
/etc/php/7.2/fpm/pool.d/www.conf:listen = /run/php/php7.2-fpm.sock
在您的 Nginx 設定目錄(通常/etc/nginx/
)中,您可能已經有一個文件fastcgi_params
,如果沒有,則建立一個文件並複製範例這裡
然後更改您的 php 位置區塊以包含您的設定文件,並使用先前從命令返回的連接埠/套接字將請求傳遞給 php fpm,如下所示:
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
include fastcgi_params;
}
現在重新啟動 Nginx,它應該可以工作了。