需要有关 Nginx CGI 配置的帮助
Need help on Nginx CGI Configuration
我需要设置 nginx 配置,这样 URL“http://host/cgi-bin/hw.sh/some/path/to/data/”应该触发 shell 脚本 "hw.sh" 出现在路径“/usr/lib/cgi-bin/”下。
现在,根据https://www.howtoforge.com/serving-cgi-scripts-with-nginx-on-debian-squeeze-ubuntu-11.04-p3页中的说明,我们需要在“.vhost”文件下进行配置。但是我在路径“/etc/nginx/sites-available/default”下已经有一个默认文件,而不是 .vhost 文件。
当我使用相同的配置时,我得到 HTTP/1.1 403 Forbidden 错误。我已确保该脚本也需要可执行权限。以下是 nginx 日志中收到的错误。
FastCGI sent in stderr: "Cannot get script name, are DOCUMENT_ROOT and SCRIPT_NAME (or SCRIPT_FILENAME) set and is the script executable?"
while reading response header from upstream,
client: host_ip, server: localhost,
request: "HEAD /cgi-bin/hw.sh/some/path/to/data/ HTTP/1.1",
upstream: "fastcgi://unix:/var/run/fcgiwrap.socket:", host: "host_ip"
我需要帮助编写正确的配置,以便我上面的 URL 执行上述路径下的 hw.sh 脚本和 returns 正确的输出。有人可以帮我吗?
下面是我在默认文件下使用的配置。
server {
listen 80 default_server;
[...]
location /cgi-bin/ {
# Disable gzip (it makes scripts feel slower since they have to complete
# before getting gzipped)
gzip off;
# Set the root to /usr/lib (inside this location this means that we are
# giving access to the files under /usr/lib/cgi-bin)
root /usr/lib;
# Fastcgi socket
fastcgi_pass unix:/var/run/fcgiwrap.socket;
# Fastcgi parameters, include the standard ones
include /etc/nginx/fastcgi_params;
# Adjust non standard parameters (SCRIPT_FILENAME)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
[...]
}
配置中的 行 "fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;" 导致了问题。
当我将其更改为 "fastcgi_param SCRIPT_FILENAME $request_filename;" 时,一切都按预期工作。
我需要设置 nginx 配置,这样 URL“http://host/cgi-bin/hw.sh/some/path/to/data/”应该触发 shell 脚本 "hw.sh" 出现在路径“/usr/lib/cgi-bin/”下。
现在,根据https://www.howtoforge.com/serving-cgi-scripts-with-nginx-on-debian-squeeze-ubuntu-11.04-p3页中的说明,我们需要在“.vhost”文件下进行配置。但是我在路径“/etc/nginx/sites-available/default”下已经有一个默认文件,而不是 .vhost 文件。
当我使用相同的配置时,我得到 HTTP/1.1 403 Forbidden 错误。我已确保该脚本也需要可执行权限。以下是 nginx 日志中收到的错误。
FastCGI sent in stderr: "Cannot get script name, are DOCUMENT_ROOT and SCRIPT_NAME (or SCRIPT_FILENAME) set and is the script executable?"
while reading response header from upstream,
client: host_ip, server: localhost,
request: "HEAD /cgi-bin/hw.sh/some/path/to/data/ HTTP/1.1",
upstream: "fastcgi://unix:/var/run/fcgiwrap.socket:", host: "host_ip"
我需要帮助编写正确的配置,以便我上面的 URL 执行上述路径下的 hw.sh 脚本和 returns 正确的输出。有人可以帮我吗?
下面是我在默认文件下使用的配置。
server {
listen 80 default_server;
[...]
location /cgi-bin/ {
# Disable gzip (it makes scripts feel slower since they have to complete
# before getting gzipped)
gzip off;
# Set the root to /usr/lib (inside this location this means that we are
# giving access to the files under /usr/lib/cgi-bin)
root /usr/lib;
# Fastcgi socket
fastcgi_pass unix:/var/run/fcgiwrap.socket;
# Fastcgi parameters, include the standard ones
include /etc/nginx/fastcgi_params;
# Adjust non standard parameters (SCRIPT_FILENAME)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
[...]
}
行 "fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;" 导致了问题。 当我将其更改为 "fastcgi_param SCRIPT_FILENAME $request_filename;" 时,一切都按预期工作。