Использование 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-файлы кэшируются для какого запроса.
Есть идеи, как я могу это сделать?
1 ответ
Просто предложение, но ваше апстримовое приложение может также потребовать строку запроса вместе с исходным URI. Вы можете попробовать изменить ваш URI по умолчанию как:
try_files $uri $uri/ /index.php$request_uri;
или же:
try_files $uri $uri/ /index.php$uri$is_args$args;
nginx
переменные документированы здесь.