J'ai un système de déploiement sur mon serveur Web, chaque fois qu'une application est déployée, elle crée un nouveau répertoire horodaté et des liens symboliques "actuels" vers le nouveau répertoire. Tout cela fonctionnait bien sur Apache, mais sur le nouveau serveur nginx que j'ai configuré, il semble qu'un script de «l'ancien» déploiement est en cours d'exécution au lieu du nouveau lien symbolique.
J'ai lu des tutoriels et des articles sur la façon de résoudre ce problème, mais il n'y a pas beaucoup d'informations et rien ne semble fonctionner. Voici mon fichier 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;
}
}
et voici mes 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;
J'apprécierais vraiment si quelqu'un pouvait m'aider avec cela car pour le moment, chaque déploiement implique la suppression du déploiement précédent. Le système est Ubuntu 14.04.5 LTS; PHP 7.1; Nginx nginx / 1.4.6 (Ubuntu)
SCRIPT_FILENAME
n'est$document_root
pas le cas$realpath_root
.DOCUMENT_ROOT
est réglé pour$realpath_root
que je le comprenne, il devrait enchaîner la valeur ou je me trompe complètement etDOCUMENT_ROOT
n'est pas lié à$document_root
DOCUMENT_ROOT
affecte$document root
Depuis /unix/157022/make-nginx-follow-symlinks , il semble que vous puissiez peut-être contourner le problème en modifiant
à
(c.-à-d. changer le chemin de
$document_root
à$realpath_root
).Je n'ai pas accès à un serveur nginx pour le moment (mon serveur domestique est actuellement en cours de reconstruction), mais la solution semble être collaborée par https://medium.com/@kanishkdudeja/truly-atomic-deployments -avec-nginx-et-php-fpm-aed8a8ac1cd9 .
la source