将Nginx配置为不呈现PHP的Apache的反向代理

时间:2019-01-03 10:21:12

标签: php apache nginx centos centos7

根据我的阅读,我正在尝试将Nginx设置为Apache的反向代理,它允许nginx提供静态内容,并且Apache处理后端PHP内容,但是我似乎无法让Apache呈现。 / p>

我在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

yy将命令安装为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中添加了2个文件,分别是index.html和index.php ... index.html可以正常工作,当我用browserspy检查时,它说它是由Nginx提供的,很好。但是当我运行index.php文件时,它会显示实际的php代码,并且不会呈现它。

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

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

什么也不返回。

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

谢谢

1 个答案:

答案 0 :(得分:0)

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;
}