Saya memiliki sistem penyebaran di server web saya, setiap kali sebuah aplikasi dikerahkan, ia menciptakan direktori timestamped baru dan menghubungkan "saat ini" dengan direktori baru. Ini semua bekerja dengan baik dan hebat pada apache, tetapi pada server nginx baru yang saya atur, sepertinya skrip dari penyebaran "lama" sedang dijalankan alih-alih yang baru disinkronkan.
Saya telah membaca beberapa tutorial dan posting tentang cara mengatasi ini tetapi tidak ada banyak info dan sepertinya tidak ada yang berhasil. Ini file vhost saya:
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;
}
}
dan ini fastcgi_params saya:
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;
Saya akan sangat menghargai jika seseorang dapat membantu saya dalam hal ini karena saat ini setiap penyebaran melibatkan penghapusan penempatan sebelumnya. Sistem adalah Ubuntu 14.04.5 LTS; PHP 7.1; Nginx nginx / 1.4.6 (Ubuntu)
SCRIPT_FILENAME
punya$document_root
, tidak$realpath_root
.DOCUMENT_ROOT
diatur$realpath_root
sedemikian rupa sehingga saya memahaminya, seharusnya rantai menarik nilai atau saya benar-benar salah danDOCUMENT_ROOT
tidak terkait dengan$document_root
DOCUMENT_ROOT
mempengaruhi$document root
Dari /unix/157022/make-nginx-follow-symlinks , tampaknya Anda mungkin dapat mengatasi masalah ini dengan mengubah
untuk
(Yaitu mengubah jalur dari
$document_root
ke$realpath_root
).Saya tidak memiliki akses ke server nginx saat ini untuk mengonfirmasi hal ini (server rumah saya sedang menjalani pembangunan kembali), tetapi solusinya tampaknya dikolaborasikan oleh https://medium.com/@kanishkdudeja/truly-atomic-deployments -dengan-nginx-dan-php-fpm-aed8a8ac1cd9 .
sumber