Eu tenho em meu site um subdiretório admin/
, que gostaria de estar em HTTPS, então tentei a seguinte configuração, com base em este :
server {
listen 80;
server_name blob.tld;
root /srv/www/blob;
index index.php index.html index.htm;
location /blog/admin/* {
return 301 https://$server_name$request_uri;
}
location / {
try_files $uri $uri/ $uri/index.php /index.html;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
server {
listen 443 ssl;
server_name blob.tld;
root /srv/www/blob/;
index index.php index.html index.htm;
ssl_certificate /srv/www/blob.tld.pem;
ssl_certificate_key /srv/www/blob.tld.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
location /blog/admin {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
try_files $uri $uri/index.php /index.html;
}
location / {
return 301 http://$server_name$request_uri;
}
}
Mas as imagens em admin/style/
não são exibidas.
Eu olhei para os arquivos de log, que dizem:
/var/log/nginx/access.log:
127.0.0.1 - - [25/Apr/2014:15:06:27 +0200] "GET /blog/admin/style/lock.png HTTP/1.1" 403 46 "-" "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit (KHTML, like Gecko) Chrome/32.0"
/var/log/nginx/error.log:
2014/04/25 15:06:27 [error] 23629#0: *404 FastCGI sent in stderr: "Access to the script '/srv/www/blob/blog/admin/style/lock.png' has been denied (see security.limit_extensions)" while reading response header from upstream, client: 127.0.0.1, server: blob.tld, request: "GET /blog/admin/style/lock.png HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000"
Dado o arquivo error.log, acho que o problema vem da primeira instrução de localização no servidor HTTPS (a diferença com o HTTP sendo ~ \.php$
). Então, tentei fazer exatamente o symetric (com \.php$
instruções em outra instrução location
):
server {
listen 443 ssl;
[...]
location /blog/admin/* {
try_files $uri $uri/ $uri/index.php /index.html;
}
location / {
return 301 http://$server_name$request_uri;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
Mas então ... não há HTTPS em tudo.
Ainda tenho a solução de deixar imagens serem exibidas em HTTP, mas isso é meio frustrante:
location /blog/admin/style {
return 301 http://$server_name$request_uri;
}
Eu tenho o nginx 1.1.19 e o php 5.3.10 com o php-fpm.