Estou tentando configurar o nginx na frente do HHVM para exibir uma API que tenha uma página de entrada listando as versões disponíveis em / e as versões reais da API instalada em / api / [version] /.
Minha configuração do nginx até agora é a seguinte:
server {
listen *:80;
server_name api.domain.com;
# Character Set
charset utf-8;
# Logs
access_log /www/vhosts/api.domain.com/logs/access_log.nginx;
error_log /www/vhosts/api.domain.com/logs/error_log.nginx;
# Directory Indices
index index.php;
# Document Root
root /www/vhosts/api.domain.com/public;
# Location
location /assets {
try_files $uri $uri/ =404;
}
location /api/1.0 {
root /www/vhosts/api.domain.com/api/1.0/public;
rewrite ^/api/1.0(.*)$ /index.php$1;
try_files $uri $uri/ /index.php?$query_string;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; }
# Error Pages
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Block access to .htaccess
location ~ \.ht {
deny all;
}
}
As solicitações para http://api.domain.com/
são exibidas corretamente na página de destino. No entanto, as solicitações para http://api.domain.com/api/1.0/foo
ainda são enviadas para o index.php em /www/vhosts/api.domain.com/public/index.php
, em vez de para /www/vhosts/api.domain.com/api/1.0/public/index.php
.
Alguém sabe como posso resolver este problema? A configuração do Apache que estou mudando está abaixo para referência:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName api.domain.com
DocumentRoot /www/vhosts/api.domain.com/public/
<Directory /www/vhosts/api.domain.com/public/>
Options -Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /www/vhosts/api.domain.com/logs/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /www/vhosts/api.domain.com/logs/access.log combined
ServerSignature Off
Alias /api/1.0 "/www/vhosts/api.domain.com/api/1.0/public/"
<Directory /www/vhosts/api.domain.com/api/1.0/public/>
Options -Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
Alias /api/latest "/www/vhosts/api.domain.com/api/1.0/public/"
SetEnv APPLICATION_ENV testing
</VirtualHost>
Em uma nota não relacionada, alguém pode marcar isso com hhvm
para mim? Eu preciso de pelo menos 300 reputação para criar a tag, e aparentemente ninguém nunca fez nenhuma pergunta relacionada a hhvm aqui ainda. : /
EDITAR:
De acordo com a sugestão do krisFR abaixo, tentei modificar o bloco location /api/1.0
da seguinte forma:
location /api/1.0 {
alias /www/vhosts/api.domain.com/api/1.0/public;
try_files $uri $uri/ /index.php?$query_string;
}
No entanto, isso carrega o código de /www/vhosts/api.domain.com/public/index.php
em vez do código que eu quero carregar em /www/vhosts/api.domain.com/api/1.0/public/index.php
. Alguma idéia adicional?