我正在维护一些CGI Web应用程序,我正在迁移到新的Linux Web服务器,我有一个非管理员帐户,比如www_maintainer.
所以我在{{{}}内部安装CGI应用程序1}},我想借此机会清理一下,特别是/home/www_maintainer/
目录可以更好地组织;我想了解一下最佳实践标准。
例如,在cgi-bin/
内有一个名为bin/
和lib/
的子目录是否正常,辅助内容的二进制文件和库?
我将描述一个具体的例子,即数学和数据绘图应用程序gnuplot及其依赖项(libfontconfig,libpng,libgd,libjpeg,libreadline.so,...)。 Python可能是另一个例子(发行版提供2.4但我需要> 2.6),但我希望管理员可以从包中安装2.6,所以我不必担心它。
新的Web服务器有Scientific Linux(SL),它基于Redhat RHEL。不幸的是,我们当前的SL版本的发行版存储库没有提供我需要的gnuplot版本4.4,所以它不能安装在像cgi-bin/
这样的正常位置,所以我可以在非系统中构建和安装它及其依赖项位置,例如/usr/bin/
。实际的CGI Web应用程序是由脚本cgi-bin/tools/
或launch1.sh
启动的二进制可执行文件。
以下是目录树及其中的一些文件的说明(当然省略了许多目录和文件)。
launch2.sh
最好在cd /home/www_maintainer/www_root/
|-- html/
| |-- index.html
| `-- info.html
|-- cgi-bin/
| |-- gen/
| | |-- status.sh*
| | `-- sybase/
| | `-- DataAccess64/
| | `-- ODBC/
| | |-- lib/
| | |-- samples/
| | `-- spl/
| |-- exe1/
| | `-- launch1.sh*
| |-- exe2/
| | `-- launch2.sh*
| |-- javascript/
| | `-- check-input.js
| |-- scripts/
| | |-- decode.pl*
| | |-- generate-random-string.bash*
| | |-- gnuplot -> ../tools
| | `-- upload.php*
| |-- tools
| | |-- bin/
| | | |-- gnuplot*
| | | |-- python -> python2.6
| | | |-- python-config -> python2.6-config
| | | |-- python2.6*
| | | |-- python2.6-config*
| | | `-- xmlwf*
| | |-- etc
| | | `-- fonts/
| | |-- include/
| | |-- info/
| | |-- lib/
| | | |-- libfontconfig.so
| | | |-- libpdf.so
| | | |-- libreadline.so
| | | |-- libpng15.so
| | | |-- libpng15.so
| | | |-- pkgconfig/
| | | |-- libpng.so
| | | |-- libjpeg.so
| | | |-- libreadline.so
| | |-- libexec/
| | |-- man/
| | `-- share/
|-- tests/
| `-- results/
| `-- info/
| |-- readme.pdf
| `-- readme.html
|-- fonts/
|-- index.html -> html/index.html
|-- log/
| `-- log.txt
`-- tmp -> /tmp/
之外安装,例如在目录www_root
和/home/www_maintainer/bin/
中安装并配置网络服务器以允许这样做吗?
答案 0 :(得分:2)
编辑:05/23/2012下午3点PT美国
如果您被限制在用户的目录中,您可以随心所欲地做任何事情。
使用是常见的情况是你将所有使用CGI的文件(Perl等)放入cgi-bin
目录中,你可以(也可能应该)放入基于目的或应用的子目录中的那些。
然后将非CGI文件放在<{1}}目录的之外,其中包括任何裸HTML文件,图形文件,CSS文件,JS文件等。
对于CGI文件使用但不是由Web用户直接使用的任何程序,请不要将它们放在webroot中,因为这不是必需的,如果Web用户可以将值提交给那些,则可能是安全漏洞以某种方式的节目。
目录树示例:
cgi-bin
然后在CGI文件中,确保根据需要正确设置/home/www_maintainer/public_html/index.html
/home/www_maintainer/public_html/images/logo.png
/home/www_maintainer/public_html/scripts/something.js
/home/www_maintainer/public_html/cgi-bin/application1/app1.cgi
/home/www_maintainer/public_html/cgi-bin/application2/app2.cgi
/home/www_maintainer/public_html/cgi-bin/application2/app2helper.cgi
/home/www_maintainer/tools/gnuplot/gnuplot
/home/www_maintainer/tools/python/python -> python2.6
/home/www_maintainer/tools/python/python2.6
/home/www_maintainer/tools/python/python2.6-config
的路径。 Web用户直接访问这些工具 如果你通过CGI(我假设,在这种情况下)做tools
,请确保你的shebang线显示正确的路径;例如python
。
原始回答:
许多应用程序所做的事情(例如与Debian一起分发的应用程序)将其应用程序放在#!/home/www_maintainer/tools/python/python
目录中,然后使用Apache /usr/share/lib/programname
和Alias
将它们映射到基本URL。这就是我以前运行自己内部开发的应用程序的方式,并且运行良好。
根据您的情况,我建议尽可能少地更改,除非您计划越来越多地增强代码或系统。如果路径发生变化,进行更改可能会带来麻烦,特别是如果有任何书签,除非您想在配置中使用ScriptAlias
。{/ p>
您是否有任何具体示例可用于演示我所描述的内容?
另外,关于古代mod_rewrite
,您的系统是否完全是最新的?或者您的Linux发行版不会推出更新版本的问题是什么?我要避免安装不受发行版包管理系统管理的Python版本。