Использование Nginx в качестве обратного прокси для сайта PHP с использованием Apache с перезаписью URL

Я пытаюсь использовать Nginx в качестве обратного прокси-сервера для Apache, работающего на PHP-сайте. Это работает, но проблема возникает при попытке переписать URL-адрес в настройке Apache, он не работает, как я надеялся. Вот настройка.

У меня есть PHP-сайт на базе Joomla, работающий на Apache, порты 8080 (http) и 44343 (https) - это работает нормально, и здесь нет проблем. Я удалил файл Joomla .htaccess, так как предполагаю, что Nginx сам переписывает index.php и позаботится о кэшировании необходимых файлов PHP.

Joomla переписывает URL-адрес следующим образом example.com/page1 => example.com/index.php/page1

У меня Nginx прослушивает порты 80, 443. Ниже приведен конфиг сайта

server {
   listen 80;
   listen [::]:80;

   server_name    www.example.com
   return         301 https://$server_name$request_uri;
}
server {
    client_max_body_size 100M;
    autoindex off;

    listen 443 ssl;
    listen [::]:443 ssl;

    server_name www.example.com;
    server_name_in_redirect off;

    ssl_certificate /example.com/ssl.crt;
    ssl_certificate_key /example.com/ssl.key;

    root /var/www/site;

    index index.php index.html index.htm default.html default.htm;

    location / {
       try_files $uri $uri/ /index.php$uri;
    }

    # Reverse Proxy and Proxy Cache Configuration
    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 https://127.0.0.1:44343;

        # Cache configuration
        proxy_cache reverse_cache;
        proxy_cache_valid 3s;
        proxy_no_cache $cookie_PHPSESSID;
        proxy_cache_bypass $cookie_PHPSESSID;
        proxy_cache_key "$scheme$host$request_uri";
        add_header X-Cache $upstream_cache_status;
    }

    ...
}

. сайт, но независимо от того, на какую страницу я захожу, он всегда загружает домашнюю страницу. Похоже, он не отправляет $uri в index.php, как ожидалось в части try_files.

Единственный способ сделать эту работу - изменить ее следующим образом:

    #location / {
    #   try_files $uri $uri/ /index.php$uri;
    #}

    # Reverse Proxy and Proxy Cache Configuration
    location / {
        ...
    }

Это просто отправляет весь запрос в Apache, и я должен вернуть файл .htaccess, который позволяет Apache сделать переписывание.

Сайт загружается, как и ожидалось, но проблема в том, что файлы PHP не кэшируются (как проверено в / var / cache). Поэтому Nginx придется переписать, чтобы узнать, какие PHP-файлы кэшируются для какого запроса.

Есть идеи, как мне это сделать?

0
задан 14 October 2016 в 22:46

1 ответ

Просто предложение, но Ваше восходящее приложение может также потребовать строки запроса вместе с исходным URI. Вы могли попытаться изменить свой URI по умолчанию как также:

try_files $uri $uri/ /index.php$request_uri;

или:

try_files $uri $uri/ /index.php$uri$is_args$args;

Эти nginx переменные зарегистрированы здесь .

0
ответ дан 14 October 2016 в 22:46

Другие вопросы по тегам:

Похожие вопросы: