我正在尝试将 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 查看 Php 模块是否存在于我的 apache 网络服务器中,然后我得到“php7_module (shared)”,所以我猜是的。
任何帮助都将不胜感激,谢谢。
亨利
附言:当我继续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,它就应该可以工作了。