Estou tentando usar o Nginx como um proxy reverso de cache para o Apache executando um site PHP. É um tipo de trabalho, mas o problema vem ao tentar reescrever a URL para a configuração do Apache, não funciona como eu esperava. Aqui está a configuração.
Eu tenho um site PHP baseado em Joomla rodando em Apache, portas 8080 (http) e 44343 (https) - isso funciona bem e não há nenhum problema aqui. Eu removi o arquivo Joomla .htaccess
, pois presumo que o Nginx fará a reescrita para index.php
e cuide do cache dos arquivos PHP necessários.
O Joomla reescreve o URL como este example.com/page1
= > example.com/index.php/page1
Eu tenho Nginx ouvindo nas portas 80, 443. Abaixo está a configuração do site
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;
}
...
}
Então, isso carrega o site, mas não importa em qual página eu vá, ele sempre carrega a página inicial. Parece não estar enviando o $uri
para index.php
conforme esperado na try_files
part.
A única maneira de fazer isso funcionar é modificando-o da seguinte maneira:
#location / {
# try_files $uri $uri/ /index.php$uri;
#}
# Reverse Proxy and Proxy Cache Configuration
location / {
...
}
Isto apenas envia a requisição inteira para o Apache, e eu tenho que trazer de volta o arquivo .htaccess
que permite ao Apache fazer a reescrita.
O site é carregado como esperado, mas o problema é que nenhum arquivo PHP é armazenado em cache (como verificado em / var / cache). Então, o Nginx terá que fazer a reescrita para saber quais arquivos PHP são armazenados em cache para cada pedido.
Alguma ideia de como posso fazer isso?
Tags proxy nginx apache-2.2