返回故事:
我有两个不同文件服务器上的所有网站文件的副本。我有两个Web服务器,mimir2和mimir4,带有映射来访问这些文件服务器中的任何一个文件。这些文件服务器的文件路径中的唯一值是dtg_devel_ah或dtg_devel_nr。
我要做的是:
我正在编辑我的httpd.conf文件,以便在服务器启动时根据Web服务器名称动态设置要使用的文件服务器。我这样做是通过使用Apaches Define指令来创建变量 dtg_devel_path ,它将在整个httpd.conf文件的其余部分的目录路径中使用。
我的代码可以完成此任务(注意:只有我的调试目的分散了SetEnv declrations):
# Define which dtg_devel_xx to use based on server name. This is so that
# the server is accessing its local files instead of across the country
# Default to dtg_devel which will point to which ever server site is active
Define dtg_devel_path dtg_devel
# If running on mimir2 use dtg_devel_nr
# else if run on mimir4 use dtg_devel_ah
<If "env('HOSTNAME') =~ /mimir2/i">
Define dtg_devel_path dtg_devel_nr
SetEnv dtg_devel_m2 ${dtg_devel_path}
SetEnv dtg_devel_hostname_m2 ${HOSTNAME}
</If>
<ElseIf "env('HOSTNAME') =~ /mimir4/i">
Define dtg_devel_path dtg_devel_ah
SetEnv dtg_devel_m4 ${dtg_devel_path}
SetEnv dtg_devel_hostname_m4 ${HOSTNAME}
</ElseIf>
SetEnv dtg_devel_final_set_path ${dtg_devel_path}
SetEnv dtg_devel_hostname ${HOSTNAME}
当我运行此项时,设置的值为:
我的问题:
dtg_devel_path 的值应为 dtg_devel_nr 。我在服务器 mimir2 上运行此功能,您可以从上面的图片中看到。 if / elseif语句的if部分返回true(HOSTNAME等于mimir2),然后设置 dtg_devel_path , dtg_devel_hostname_m2 ,和 dtg_devel_m2 。奇怪的是,虽然以某种方式 dtg_devel_path 然后更改为值 dtg_devel_ah ,即使从不输入elseif块。这可以通过 dtg_devel_final_set_path 变量的值以及 dtg_devel_m4 和 <的值来确认EM> dtg_devel_hostname_m4 即可。此代码块是字符串 dtg_devel_ah 出现的唯一位置,因此必须在此处设置。
有没有人在我的代码中看到我的错误?有没有人有什么建议?任何帮助将不胜感激!!如果需要任何其他信息,请告诉我。
答案 0 :(得分:0)
我无法弄清楚如何通过Apache彻底解决这个问题,所以我最终走的路径略有不同。我的Web服务器在RHEL 6.4计算机上运行。
我基本上把我在http.conf文件中的if / else函数拉到了三个地方; /etc/profile.d/dtg_deve_path.<sh,csh>
和/etc/init.d/httpd
。这些文件检查主机名并根据该值创建DTG_DEVEL_PATH环境变量。然后我使用Define dtg_devel_path ${DTG_DEVEL_PATH}
在httpd.conf中访问该值,然后让我完成我想要做的事情,通过httpd.conf文件的其余部分使用${dtg_devel_path}
来动态指定哪个文件服务器使用。