【问题标题】:Configure Nginx as reverse proxy for Apache not rendering PHP将 Nginx 配置为 Apache 的反向代理而不渲染 PHP
【发布时间】:2019-05-29 22:14:30
【问题描述】:

我正在尝试将 Nginx 设置为 Apache 的反向代理,据我所知,它允许 nginx 提供静态内容,而 Apache 处理后端 PHP 内容,但我似乎无法让 Apache 呈现。

我在 CentOS7 上,我只使用yum install nginx 安装了 nginx,然后我通过执行以下操作安装了 PHP7.2;

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php72
yum install php72 php72-php-fpm php72-php-mysqlnd php72-php-opcache php72-php-xml php72-php-xmlrpc php72-php-gd php72-php-mbstring php72-php-json

运行php72 -v 给了我

PHP 7.2.13 (cli) (built: Dec  8 2018 10:59:58) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.13, Copyright (c) 1999-2018, by Zend 
Technologies

然后我跑了

ln -s /usr/bin/php72 /usr/bin/php

当 yum 将命令安装为php72

我编辑了 nginx.conf 并将用户从 nginx 更改为 apache 并将服务器块更改为;

server {
listen       80 default;
    server_name  108.xxx.xxx.xxx;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
            root /var/www/html;
            proxy_pass http://127.0.0.1:8080/;
            proxy_redirect off;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

我还添加了 /etc/nginx/conf.d/proxy.conf 以下内容;

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

然后我通过yum install httpd 安装了 Apache2。

然后我编辑了 Apache2 httpd.conf 文件;

- Listen 80
+ Listen 127.0.0.1:8080

我还编辑了 /etc/opt/remi/php72/php-fpm.d/www.conf 并将用户和组更改为 apache 以及

listen = /var/run/php-fpm.sock
listen.owner = apache
listen.group = apache
listen.mode = 0660

这些是我所做的唯一更改。

我向/var/www/html 添加了两个文件,index.html 和 index.php ... index.html 运行良好,当我检查 browserspy 时,它说它正在由 Nginx 提供服务,非常好。但是当我运行 index.php 文件时,它会显示实际的 php 代码并且不会呈现它。

我以前从未真正使用过 Apache2,所以我不确定如何查找错误。当我在 Apache2 模块目录中查找时,我找不到任何 PHP 模块

ls -lah /etc/httpd/modules/ | grep php

什么都不返回。

任何帮助都会非常有用,我这几天一直在寻找解决方案。

谢谢

【问题讨论】:

    标签: php apache nginx centos centos7


    【解决方案1】:

    Nginx 绝对可以执行 PHP 脚本,而无需代理回 Apache。 您只看到 PHP 代码而不是网站的原因是您的 Apache 配置可能没有启用 PHP 模块。

    您可以通过运行yum --enablerepo=remi install php 并运行service apache2 restart 以使用新配置重新启动服务器来执行此操作。 安装基础 PHP 包还会为 Apache 执行的 PHP 文件添加所需的模块。

    这应该允许您的服务器按照您的预期开始执行 PHP 脚本。

    如果您想改为通过 Nginx 运行您的 PHP 网站,则需要对您的 Nginx 配置进行一些细微的修改。

    首先,您需要替换您的位置块以使用本地文件系统上的文件,然后将任何 .php 文件指向使用 PHP-FPM 运行。

    location / {
        root /var/www/html;
        try_files $uri $uri/ =404;
    }
    
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    

    【讨论】:

    • 嘿 Steven,我在运行 a2enmod 命令时得到一个command not found,我在 CentOS7 上,我相信这是一个基于 debian 的命令...我想通过 Apache 而不是 nginx 运行 php
    • 嘿,我的错,没有意识到 a2nmod 是一个特定于 debian 的命令。您应该能够通过安装基本 PHP 包 yum --enablerepo=remi install php 并重新启动 httpd 来解决原始问题。
    • 我已经使用 remi-php72 repo 安装 PHP 7.2 .. 见帖子顶部
    • 安装 php72-php 包确实安装了 PHP,但由于某种原因不包括 PHP 的 Apache 模块。安装基础 PHP 包将安装 Apache 模块,允许您的服务器开始使用 PHP7。
    • 我很想知道 php72-php 包现在发生了什么,我应该卸载它们吗?
    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2015-04-26
    相关资源
    最近更新 更多