Tengo un sistema de implementación en mi servidor web, cada vez que se implementa una aplicación, crea un nuevo directorio con marca de tiempo y enlaces simbólicos "actuales" al nuevo directorio. Todo esto funcionó bien y genial en Apache, pero en el nuevo servidor nginx que configuré, parece que se está ejecutando un script de la implementación "antigua" en lugar del nuevo enlace simbólico.
He leído algunos tutoriales y publicaciones sobre cómo resolver esto, pero no hay mucha información y nada parece funcionar. Aquí está mi archivo 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;
}
}
y aquí está mi 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;
Realmente agradecería si alguien pudiera ayudarme con esto, ya que en este momento cada implementación implica eliminar la implementación anterior. El sistema es Ubuntu 14.04.5 LTS; PHP 7.1; Nginx nginx / 1.4.6 (Ubuntu)
SCRIPT_FILENAME
tiene$document_root
, no$realpath_root
.DOCUMENT_ROOT
está configurado para$realpath_root
que, por lo que entiendo, debería encadenar el valor o estoy completamente equivocado yDOCUMENT_ROOT
no está relacionado con$document_root
DOCUMENT_ROOT
afecta$document root
Desde /unix/157022/make-nginx-follow-symlinks , parece que puede solucionar el problema cambiando
a
(es decir, cambiar la ruta de
$document_root
a$realpath_root
).No tengo acceso a un servidor nginx en este momento para confirmar esto (mi servidor doméstico está actualmente en proceso de reconstrucción), pero la solución parece estar colaborada por https://medium.com/@kanishkdudeja/truly-atomic-deployments -with-nginx-and-php-fpm-aed8a8ac1cd9 .
fuente