Настройте Nginx в качестве обратного прокси-сервера для Apache, не отображающего PHP - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь настроить Nginx в качестве обратного прокси-сервера для Apache, из того, что я прочитал, он позволяет nginx обслуживать статический контент, а Apache обрабатывает бэкенд PHP, но я не могу заставить Apache отображать.

Я на CentOS7, я установил nginx, просто используя yum install 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 и изменил блок сервераto;

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;

Затем я установил Apache2 через yum install httpd.

Затем я отредактировал файл httpd.conf Apache2;

- 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

Это единственные изменения, которые я сделал.

Я добавил 2 файла в /var/www/html, index.html и index.php ...Index.html отлично работает, и когда я проверяю с browserspy, он говорит, что он обслуживается Nginx, отлично.Но когда я запускаю файл index.php, он отображает реальный код php и не отображает его.

Я никогда прежде не работал с Apache2, поэтому я не уверен, как искать ошибку.Когда я вхожу в каталог модулей Apache2, я не могу найти какие-либо модули PHP

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

вообще ничего не возвращает.

Любая помощь будет очень полезной, я искал решение длядней.

Спасибо

1 Ответ

0 голосов
/ 03 января 2019

Nginx может определенно выполнять сценарии PHP без необходимости обратного прокси в Apache. Причина, по которой вы видите только код PHP, а не веб-сайт, заключается в том, что в вашей конфигурации Apache, скорее всего, не включен модуль PHP.

Вы можете сделать это, запустив yum --enablerepo=remi install php и запустив service apache2 restart, чтобы перезапустить сервер с новой конфигурацией. Установка базовых пакетов PHP также добавляет необходимые модули для файлов PHP, выполняемых Apache.

Это должно позволить вашему серверу начать выполнение сценариев PHP, как вы ожидаете.

Если вы хотите вместо этого запустить свой PHP-сайт через Nginx, вам нужно будет внести небольшие изменения в конфигурацию 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;
}
...