Eu tenho um sistema de implantação no meu servidor Web, toda vez que um aplicativo é implantado, ele cria um novo diretório com registro de data e hora e os links simbólicos "atuais" para o novo diretório. Tudo funcionou muito bem no apache, mas no novo servidor nginx que eu configurei, parece que um script da implantação "antiga" está sendo executado em vez do novo link simbólico.
Eu li alguns tutoriais e posts sobre como resolver isso, mas não há muita informação e nada parece funcionar. Aqui está o meu arquivo vhost:
server {
listen 80;
server_name ~^(www\.)?(?<sname>.+?).testing.domain.com$;
root /var/www/$sname/current/public;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) {
add_header Cache-Control public;
add_header Cache-Control must-revalidate;
expires 7d;
}
location ~ \.php$ {
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
}
location ~ /\.ht {
deny all;
}
}
e aqui está o meu fastcgi_params:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param HTTPS $https if_not_empty;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
Eu realmente apreciaria se alguém pudesse me ajudar com isso, pois no momento toda implantação envolve a exclusão da implantação anterior. O sistema é o Ubuntu 14.04.5 LTS; PHP 7.1; Nginx nginx / 1.4.6 (Ubuntu)
SCRIPT_FILENAME
tem .$document_root
$realpath_root
DOCUMENT_ROOT
está definido para$realpath_root
assim do jeito que eu entendo, ele deve cadeia de puxar o valor ou estou completamente errado eDOCUMENT_ROOT
não está relacionado com$document_root
DOCUMENT_ROOT
afecta$document root
Em /unix/157022/make-nginx-follow-symlinks , parece que você pode solucionar o problema alterando
para
(ou seja, alterando o caminho de
$document_root
para$realpath_root
).No momento, não tenho acesso a um servidor nginx para confirmar isso (meu servidor doméstico está passando por uma reconstrução), mas a solução parece ser colaborada por https://medium.com/@kanishkdudeja/truly-atomic-deployments -com-nginx-e-php-fpm-aed8a8ac1cd9 .
fonte