如何通过nginx提供具有可执行权限的二进制文件?

我正在服务位于/var/www/bin/binary的Go二进制/var/www/bin/binary

 location ~ (binary) { root /var/www/bin; } 

但是,当我用wget http://example.com/binary下载它时,我无法马上运行它,因为它不再是可执行文件。 我需要先运行chmod +x binary

我怎样才能解决这个问题? 谢谢。

编辑:发现一个更大的讨论类似的问题: https : //unix.stackexchange.com/questions/82578/why-is-that-when-i-download-a-binary-from-the-web-it-doesnt -具备可执行每

在HTTP文件传输的过程中不传送文件权限。 所有的nginx都是打开二进制文件,读取数据,并将其传输到客户端( wget )。 在客户机上设置权限取决于客户端上的umask ,以及您的web客户端浏览器可能对其执行的任何操作。

如果您想简化下载和执行二进制文件的步骤,可以采取几种方法。 一个简单的是:

 wget -O binary http://example.com/binary && chmod +x ./binary && ./binary 

或者,您可以在http://example.com/install.sh放置一个shell脚本:

 #!/bin/sh if wget -O "binary" "http://example.com/binary"; then chmod +x "./binary" echo "Successfully installed binary. To run, use: ./binary" # Or just run it here: # ./binary else echo "Failed to download binary." >&2 fi 

那么,你的安装可以是:

 wget -O - http://example.com/install.sh | sh 

要么:

 curl -o - http://example.com/install.sh | sh 

请注意,这些安装方法都不是安全的。 您需要计算二进制文件(和shell脚本)的签名并在下载时validation它们,我build议使用HTTPS。 但是,我认为这是一些内部使用types(在这种情况下,安全性通常很重要)!