Sun WebServer 安装指南,Solaris for Intranets 版

第 4 章 从 Sun WebServer 1.0 向 Sun WebServer 2.0 的迁移

新术语/新结构

Sun WebServer 2.0 与 Sun WebServer 1.0 有很大的差别,因此 Sun WebServer 1.0 配置文件必须转换为与 Sun WebServer 2.0 兼容的文件。本文档是有关这种转换的指南。有关 Sun WebServer 2.0 的新特性的详细信息,请查阅 Sun WebServer 2.0 文档。

虽然 Sun WebServer 1.0 和 Sun WebServer 2.0 可安装在同一台机器上,但它们不能共存于同一个位置。必须先将 Sun WebServer 1.0 彻底去除,然后才能安装 Sun WebServer 2.0。只有当 Sun WebServer 1.0 安装在一个非缺省目录(非“/”的目录)下时,它才可以与 Sun WebServer 2.0 共存。有关将 Sun WebServer 1.0 安装到非缺省目录的说明,请查阅“Sun WebServer 1.0 安装指南”。本文档中的示例是指使用其缺省安装位置(httpd.confaccess.acl 都位于 /etc/http/)的 Sun WebServer 1.0 配置文件。在去除 Sun WebServer 1.0 软件包(这必须在安装 Sun WebServer 2.0 之前完成)之后,配置文件被移至一个备份目录 /etc/http.bak[.n]/(例如,/etc/http.bak//etc/http.bak.1//etc/http.bak.2/,...)。最近一次卸载的配置文件将位于具有最高 `n' 值的目录中。

实例和 Web 站点

尽管 Sun WebServer 1.0 能够支持同时运行的多个 HTTP 服务器实例,但是,在单一的 HTTP 守护程序实例情况下,启动、停止和重新启动服务器效果最佳。Sun WebServer 2.0 为系统上的每一个 httpd 守护程序提供一个唯一的名称,从而改进了对多实例的支持。通过使用其名称即可启动、停止和重新启动单个的实例。有关详细信息,请参阅 man 页 htserver(1m)

Sun WebServer 2.0 还扩展了对虚拟主机的支持。现在每一个虚拟主机都与一个 Web 站点相关联,并在文件系统中有其自己的子树,其中含有该主机的配置文件及主机的文档根。Sun WebServer 1.0 将虚拟主机的所有配置信息保存在全局配置文件 httpd.conf 中,而 Sun WebServer 2.0 将大部分这类信息存储在位置相对于 Web 站点根的站点配置文件中。将大部分为站点所特有的配置信息放置在 Web 站点,而不是一个单一的文件中,使 Sun WebServer 2.0 比 Sun WebServer 1.0 具有更好的缩放性,并简化了对单个 Web 站点的管理。

配置文件的位置

Sun WebServer 1.0 在缺省位置 /etc/http/ 有两个主配置文件:

Sun WebServer 2.0 将这些文件中的指令划分到用于服务器实例的服务器级配置文件,和用于单个 Web 站点的站点级配置文件中。

服务器级配置文件

服务器级配置文件缺省安装于 /etc/http/。下面的 <instance_name> 是使用此文件的 httpd 实例的唯一名称。当使用“Sun WebServer 管理控制台”或 htserver add 命令创建了一个服务器实例时,便有一个实例名与之相关联。

站点级配置文件

站点级配置文件缺省安装于 Web 站点子树。下面的 <site_name> 指使用此文件的 Web 站点名称。

上述所有文件名均为建议的名称。唯一一个固定的配置文件名是 /etc/http/httpd-instances.conf。每一个服务器实例名和基本配置文件都列在 httpd-instances.conf 中,每一个服务器配置文件都按名称依次指向其它的配置文件。

命令行实用程序

Sun WebServer 2.0 增加了大量用于修改其配置文件的命令行实用程序。这些实用程序在本文档的各个地方被用来解释向 Sun WebServer 2.0 的迁移。有关可从命令行使用的所有 Sun WebServer 实用程序的详细信息,请参阅 Sun WebServer 2.0 man 页。有关本文档所引用的命令的详细信息,请参阅 htserver(1m)hthost(1m)htrealm(1m) man 页。有关引用的配置文件的详细信息,请参阅 httpd.conf(4)httpd.site.conf(4)access.conf(4)realms.conf(4)。Sun WebServer 2.0 也有一个“管理控制台”,位于软件包 SUNWhtadm 中,可以用来管理 HTTP 服务器的各个方面。若要访问“管理控制台”,您还必须安装 SUNWixklgSUNWixavm

创建 Sun WebServer 2.0 服务器

在将 Sun WebServer 1.0 配置文件转换为 Sun WebServer 2.0 格式之前,先向系统添加一个基本的 Sun WebServer 2.0 实例。此服务器将含有 Sun WebServer 2.0 使用的一般文件结构,并将提供可以使用 Sun WebServer 1.0 服务器的值进行修改的缺省配置文件。

创建一个叫做“server1”的新 Sun WebServer 2.0 实例:
  1. 在命令行键入如下内容(作为“root”):


    # htserver add "server1"
    

    此命令创建一个新的 Sun WebServer 2.0 服务器级配置文件和一个缺省 Web 站点。新文件的安装位置如下:

    • /etc/http/server1.httpd.conf:服务器配置文件

    • /var/http/server1/:新服务器的根

    • /ver/http/server1/websites/default_site/:缺省的 Web 站点的站点路径

    • /var/http/server1/websites/default_site/conf/:站点配置文件的位置

迁移 Sun WebServer 1.0 httpd.conf 文件

Sun WebServer 1.0 /etc/http/httpd.conf 文件含有用来配置整个服务器、单个虚拟主机及端口的基本指令。三个主块类型为 server{} 块、 url{} 块和 port{} 块。这些类型的每一种都将在本节进行讨论。

server{}

server{} 块从 Sun WebServer 1.0 转换为 Sun WebServer 2.0 格式,相对来说比较简单。1.0 中的大部分指令与 2.0 相同,只有下列例外:

acl_delegate_depth

Sun WebServer 不再支持 acl_delegate_depth 指令及访问控制代理概念。参见本文档中的“迁移 Sun WebServer 1.0 access.acl 文件”。

acl_enable

acl_enable 指令已经变更为 access_enable

转换 acl_enable 指令
  1. /etc/http/httpd.conf 中寻找下列 Sun WebServer 1.0 指令:


    acl_enable				yes
  2. /etc/http/server1.httpd.conf 中用下列指令替换它:


    access_enable 		yes

acl_file

acl_file 指令在 server{} 块中不再被支持,因为服务器级的访问控制文件现在配置为:/etc/http/access.conf。此文件名不能变更。

map

map 指令在 server{} 块中不再被支持。所有 URL 映射必须在 Web 站点的 map.conf 文件中进行。

mime_add

mime_add 指令在 Sun WebServer 2.0 中不再被支持。所有 MIME 类型都必须在服务器或站点级的 mime.types 文件中指定。

转换 mime_add 指令
  1. 假定有以下 Sun WebServer 1.0 指令:


    server {
    	mime_add			"image/.jpeg"			"JPG"
    }
  2. 一定要保证在 /etc/http/server1.httpd.conf 中指定了一个 mime.types 文件:


    注意:

    如果此文件为所有服务器所共享,则变更将会影响所有 httpd 守护程序



    server {
    	mime_file 			"/etc/http/mime.types
    }
  3. 将新的 MIME 映像添加到 /etc/http/mime.types 文件中:


    image/jpeg 			JPG

server{} 块转换
  1. 假定在 /etc/http/httpd.conf 中有以下 Sun WebServer 1.0 server{} 块:


    server {
    	server_root							"/var/http/demo/"
    	server_user							"root"
    	mime_add										"image/jpeg"	"JPG"
    	mime_default_type	 text/html
    	acl_enable								"yes"
    	acl_file										"/etc/http/access.acl"
    	acl_delegate_depth			3
    
    	map			/cgi-bin/				/var/http/cgi-bin/			cgi	
    }
  2. 修改 /etc/http/server1.httpd.conf 中的 server{} 块:


    server {
    	server_root							"/var/http/demo/"
    	server_user							"http"
    	mime_file									"/etc/http/mime.types"
    	mime_default_type	 text/html
    	access_enable					"yes"
    }
  3. 将 MIME 映像添加到 (2) 中指定的 /etc/http/mime.types 文件:


    image/jpeg				JPG

url{}

在 Sun WebServer 1.0 中,一个虚拟主机的所有配置参数都在 /etc/http/httpd.conf 文件中的单一位置。在 Sun WebServer 2.0 中,虚拟主机的全局信息位于服务器级配置文件中,更具体的信息位于站点级的配置文件中。

将一个 Sun WebServer 1.0 url{} 块转换为 2.0
  1. 使用 hthost 命令行实用程序向 2.0 服务器添加新的 Web 站点。

  2. 修改使用 Sun WebServer 1.0 值或 Sun WebServer 2.0 等效创建的新配置文件。

创建 2.0 Web 站点
  1. 向当前服务器 (server1) 添加一个 Web 站点 (widgets):


    # hthost add -i server1 -h widgets \
    	-s /var/http/server1/websites/widgets
    

    这将会向服务器级配置文件 /etc/http/server1.httpd.conf 添加下列条目:


    url //widgets {
    	site_enable 				"yes"
    	site_path							"/var/http/server1/websites/widgets"
    	site_config					"conf/widgets.site.conf"
    }

    它还将在 /var/http/server1/websites/widgets/ 创建一个新的 Web 站点。下列配置文件将放在目录 /var/http/server1/websites/widgets/conf/ 中:

    • widgets.site.conf

    • access.conf

    • realms.conf

    • map.conf

    • content.conf

    • servlets.properties

修改服务器级配置文件

Sun WebServer 1.0 url{} 块的大部分配置参数将放置在站点级配置文件 widgets.site.conf 中。一个例外是设置虚拟主机侦听的端口。对于每一个虚拟主机,都必须指定它在哪个 IP 地址和端口接收连接(这与 1.0 不同,在 1.0 中,该信息存储在使用 hosts_supported 指令的 port{} 块中)。IP 地址:端口对在 Sun WebServer 2.0 中称为“连接端点”。所有 Web 站点的连接端点都应被指定(缺省 Web 站点例外,该站点在所有接口上侦听,不允许连接端点被定义)。有关连接端点的详细信息,参见 httpd.conf (4)

设置 Web 站点的连接端点
  1. 若要使虚拟主机 widgets 接受端口 80 上的 IP 地址 129.128.127.126 及端口 1880 上的所有 IP 地址的连接,请在 /etc/http/server1.httpd.conf 中写入下列内容:


    url //widgets {
    	site_enable					 "yes"
    	site_path							 "/var/http/server1/websites/widgets"
    	site_config						"conf/widgets.site.conf"
    	conn_end_points		129.128.127.126:80:1880
    }

注意:

不在冒号 (:) 左侧指定 IP 地址在 HTTP 1.1 虚拟主机中将缺省为“所有 IP 地址”。还要注意所有指定的连接端点都必须被 port{} 块映射。


修改站点级配置文件

大部分 Sun WebServer 1.0 url{} 块配置指令可以直接复制到 Sun WebServer 2.0 站点级配置文件:/var/http/server1/websites/widgets/conf/widgets.site.conf 中,只有下列例外:

map

所有 Sun WebServer 2.0 URL 映射现在都存储在一个单独的文件:map.conf 中。

转换映射指令
  1. 假定在 /etc/http/httpd.conf 中有下列 Sun WebServer 1.0 指令:


    url //widgets {
    	map 		/cgi-bin/			/var/http/shared/cgi-bin/			cgi
    }
  2. 向 widgets 站点的 /var/http/server1/websites/widgets/conf/map.conf 文件添加下列行:


    map 		/cgi-bin/			/var/http/shared/cgi-bin/			cgi

mime_add

转换 mime_add 指令
  1. 假定在 /etc/http/httpd.conf 中有下列 Sun WebServer 1.0 指令:


    url //widgets {
    	mime_add 				"image/jpeg"					"JPG"
    }
  2. 取消对 /var/http/server1/websites/widgets/conf/widgets.site.conf 中的 mime_file 指令的注释:


    url //widgets {
    	mime_file				"conf/mime.types"
    }
  3. /var/http/server1/websites/widgets/conf/mime.types 文件添加新的 MIME 映像:


    image/jpeg					JPG

port{}

在 Sun WebServer 2.0 中,port{} 块有两个主要变更:hosts_supported 指令不再有效,因为主机侦听的端口现在使用 url{} 块中的 conn_end_points 指令列出,所有端口都必须指定一个 ip_address。IP 地址 0.0.0.0 是特殊的,表示“本机上所有有效的 IP 地址”。

为一个特定的 IP 地址转换 port{}
  1. 假定有下列 Sun WebServer 1.0 port{} 块:


    port 80 {
    	ip_address									129.128.127.126
    	keepalive_enable			"yes"
    	request_timeout				180
    	hosts_supported					widgets
    }
  2. 修改 /etc/http/server1.httpd.conf 中的 widgets url{} 块,以便正确指定 conn_end_points


    url //widgets {
    	site_enable 					"yes"
    	site_path								"/var/http/server1/websites/widgets"
    	site_config						"conf/widgets.site.conf"
    	conn_end_points			129.128.127.126:80
    }
  3. /etc/http/server1.httpd.conf 添加 port{} 块(没有 hosts_supported 指令):


    port 80 {
    	ip_address									129.128.127.126
    	keepalive_enable			"yes"
    	request_timeout				180
    }
为所有 IP 地址转换 port{}
  1. 假定有下列 Sun WebServer 1.0 port{} 块示例:


    port 1880 {
    	keepalive_enable				"yes"
    	request_timeout					180
    	hosts_supported					widgets
    }
  2. 修改 /etc/http/server1.httpd.conf 中的 widgets url{} 块,以便正确指定 conn_end_points


    url //widgets {
    	site_enable							"yes"
    	site_path 								"/var/http/server1/websites/widgets"
    	site_config							"conf/widgets.site.conf"
    	conn_end_points			:1880
    }
  3. /etc/http/server1.httpd.conf 中的 port{} 块添加具有 0.0.0.0 值的 ip_address 指令:


    port 1880 {
    	ip_address									0.0.0.0
    	keepalive_enable			"yes"
    	request_timeout				180
    }

迁移 Sun WebServer 1.0 access.acl 文件

Sun WebServer 2.0 与 1.0 相比,访问控制已经发生了很大变化。在试图将旧的 Sun WebServer 访问控制结构向新的迁移之前,应该参阅 Sun WebServer 2.0 访问控制文档。下面列出最重要的变更:

若要将 Sun WebServer 1.0 access.acl 文件迁移到 2.0,需要创建或选择鉴别领域,修改映射的 URL 的访问控制语法以反映新的 2.0 语法,并将 access.acl 文件和被代理文件中的访问控制收集到每个单独的 Web 站点的 access.conf 文件中。

领域

在 Sun WebServer 1.0 中, realm 指令除作为浏览器的标识符(印在鉴别对话框中)外,没有什么重要性。在 Sun WebServer 2.0 中,领域指定了一组预先存在的用户和组用来鉴别对一个 URL 的访问。领域信息存储在 realms.conf 文件中。HTPASSWD 领域也有与它们相关联的一个目录(在 realm.conf 中定义),含有将用于鉴别的“用户”和“组”文件。 Sun WebServer 1.0 ACL 中的 password_filegroup_file 指令因此已经作废。所有 1.0 领域在 2. 0 中将为 HTPASSWD 领域,因为这些由用户创建的数据库是 1.0 中唯一可用的源。

向 Sun WebServer 2.0 领域迁移
  1. 假定在 /etc/http/access.acl 中有下列 Sun WebServer 1.0 访问控制用于主机 widgets:


    url /reports {
    	realm															Managers
    	authentication_type		basic
    
    	password_file							/usr/auth/Managers/Maners_users
    	group_file										/usr/auth/Managers/Managers_groups
    
    	+ group														report_managers
    	- user															Joe
    }
  2. 创建一个领域以容纳口令和组文件。这可以通过下列步骤完成:


    # htrealm add -i server1 -h widgets -r Managers -s HTPASSWD
    

    此命令将为站点 widgets 向 realms.conf 添加下列条目:


    realm Managers {
    	realm_source HTPASSWD
    }

    它还在站点 widgets 创建下列目录:


    /var/http/server1/websites/widgets/conf/realms/Managers/
  3. 将用户和组文件复制到 Managers 目录:


    # cp /usr/auth/Managers/Managers_users \
    	/var/http/server1/websites/widgets/conf/realms/Managers/users
    # cp /usr/auth/Managers/Managers_groups \
    	/var/http/server1/websites/widgets/conf/realms/Managers/groups
    
  4. 从 Sun WebServer 1.0 ACL 中去除文件指令,并将新的 ACL 放置在 Sun WebServer 2.0 ACL 文件中:/var/http/server1/websites/widgets/conf/access.conf:


    url /reports {
    	realm 															Managers
    	authentication_type			basic
    
    	+ group 													 report_managers
    	- user															Joe
    }

代理

代理的概念已从 Sun WebServer 2.0 中去除。原来位于被代理文件中的所有访问控制都必须重新定位到一个特定站点的单一的 access.conf 中。

转换被代理的 ACL
  1. 假定有下列 Sun WebServer 1.0 ACL 和代理文件:

    • /etc/http/access.acl 中的 ACL:


      url /statistics {
      	delegate 		/var/http/acls/.admin_acl
      }
    • /var/http/acls/.admin_acl 文件:


      realm 									admin
      password_file		/usr/auth/admin_user
      group_file					/usr/auth/admin_group
      
      + group								stat_admins
    • 这些必须被折叠进一个单一的 ACL 中:


      注意:

      领域 admin 必须已经先创建;见前面的示例。



      url /statistics {
      	realm 		 admin
      	+ group		stat_admins
      }
转换被代理的 ACL(高级)
  1. 假定有下列 Sun WebServer 1.0 ACL 和被代理文件:

    • access.acl 中的 ACL:


      url /statistics {
      	delegate 		/var/http/acls/.admin_acl
      }
    • /var/http/acls/.admin_acl 文件(此文件的所有权为 joe:adm


      realm 									 admins
      password_file			/usr/auth/admin_user
      group_file						/usr/auth/admin_group
      
      + group									stat_admins
  2. 这些必须被折叠进一个单一的 ACL 中:


    url /statistics {
    	realm					 admins
    
    	administrators {
    		user					 joe
    		group				 adm
    	}
    
    	+ group				stat_admins
    }

Sun WebServer 转换

下面的示例显示 Sun WebServer 1.0 httpd.confaccess.acl 文件向 Sun WebServer 2.0 的全面转换。在下面的示例中,新的 2.0 指令被忽视,除非它们为转换所明确要求。

Sun WebServer 1.0 httpd.conf 转换到 2.0
  1. 假定有下列 Sun WebServer 1.0 /etc/http/httpd.conf 文件:


    server {
    	server_root								"/var/http/demo"
    	server_user								"root"
    	mime_file										"/etc/http/mime.types"
    	mime_default_type			text/html
    
    	acl_enable									"yes"
    	acl_file											"/etc/http/access.acl"
    	acl_delegate_depth		3
    	cache_enable							"yes"
    	cache_small_file_cache_size	8
    	cache_large_file_cache_size	256
    	cache_max_file_size									1
    	cache_verification_time					10
    
    	map			 /cgi-bin/					/var/http/demo/cgi-bin/			cgi
    	map				/sws-icons/			/var/http/demo/sws-icons/
    
    	mime_add		"appication/java"				class
    	mime_add		"audio/basic"								au
    	mime_add		"audio/basic"								snd
    }
    
    url {
    	doc_root									 "/var/http/demo/public"
    	user_doc_enable			"no"
    	user_doc_root					"public_html"
    	cgi_enable							 "no"
    	cgi_dns_enable		"no"
    	cgi_suffix_enable	    "no"
    	cgi_user										"nobody"
    	log_type										"elf"
    	log_prefix								"/var/http/logs/http"
    	log_max_files						7
    	log_cycle_time					1440
    	log_max_file_size		1048576
    	ssi_enable									"no"
    	ssi_exec											"no"
    	ssi_xbithack							"off"
    
    	mime_add								"application/x-csh"		csh
    	mime_add								"application/xsh"				sh
    }
    
    url //widgets {
    	doc_root								 "/var/http/widgets/public"
    	user_doc_enable		"yes"
    	user_doc_root				"public_html"
    	cgi_enable						 "yes"
    	cgi_dns_enable			"yes"
    	cgi_suffix_enable	 "yes"
    	cgi_user									"nobody"
    
    	log_type								"clf"
    	log_prefix						"/var/http/logs/widgets"
    	log_max_files				7
    	log_cycle_time			1440
    	log_max_file_size		1048576
    	ssi_enable							"yes"
    	ssi_exec									"yes"
    	ssi_xbithack					"full"
    
    	map 		/cgi-bin/				/var/http/widgets/cgi-bin/		cgi
    	map 		/sws-icons/		/var/http/widgets/sws-icons/
    }
    
    port 80 {
    	keepalive_enable			"yes"
    	request_timeout				180
    }
    
    port 1880 {
    	ip_address										129.128.127.126
    	keepalive_enable			"yes"
    	request_timeout				180
    	hosts_supported				widgets
    }
  2. 为转换创建一个新服务器(我们将修改使用 1.0 的值为新服务器创建的配置文件):


    #htserver add "server1"
    
  3. 添加一个 Web 站点――widgets:


    # hthost add -i server1 -h widgets \
    	-s /var/http/server1/websites/widgets
    
  4. 修改服务器级文件 /etc/http/server1.httpd.conf


    server {
    	server_root						"/var/http/server1/"
    	server_user						"root"
    	mime_file								"/etc/http/mime.types"
    	mime_default_type	 	text/html
    	access_enable					"yes"
    	cache_enable						"yes"
    	cache_small_file_cache_size		8
    	cache_large_file_cache_size		256
    	cache_max_file_size									 1
    	cache_verification_time					 10
    }
    
    url {
    	site_path					/var/http/server1/websites/default_site
    	site_config			"conf/default_site.site.conf"
    	site_enable			"yes"
    }
    
    url //widgets {
    	site_enable				"yes"
    	site_path						"/var/http/server1/websites/widgets"
    	site_config				"conf/widgets.site.conf"
    	conn_end_points	129.128.127.126:1880 :80
    }
    
    port 80 {
    	ip_address							0.0.0.0
    	keepalive_enable	"yes"
    	request_timeout		180
    }
    
    port 1880 {
    	ip_address						129.128.127.126
    	keepalive_enable	"yes"
    	request_timeout			180
    }
  5. 修改 /etc/http/mime.types


    application/java				class
    audio/basic									au snd
  6. 修改 /var/http/server1/websites/default_site/conf/default_site.site.conf


    url {
    	doc_root						/var/http/demo/public
    
    	map_file						conf/map.conf
    	realm_file				conf/realms.conf
    	access_file			conf/access.conf
    	content_file		conf/content.conf
    	mime_file					conf/mime.types
    
    	user_doc_enable		"no"
    	user_doc_root				"public_html"
    	cgi_enable							"no"
    	cgi_dns_enable			"no"
    	cgi_suffix_enable	"no"
    	cgi_user									"nobody"
    	log_type									"elf"
    	log_prefix							"/var/http/server1/logs/default"
    	log_max_files					7
    	log_cycle_time				1440
    	log_max_file_size	 1048576
    	ssi_enable							"no"
    	ssi_exec									"no"
    	ssi_xbithack					"off"
    }
  7. 创建 /var/http/server1/websites/default_site/conf/mime.types


    application/x-csh			csh
    application/x-sh				sh
  8. 修改 /var/http/server1/websites/default_site/conf/map.conf


    map 		/cgi-bin/				 /var/http/demo/cgi-bin/		cgi
    map			/sws-icons/			/var/http/demo/sws-icons/
  9. 修改 /var/http/server1/websites/widgets/conf/widgets.site.conf


    url {
    	doc_root						/var/http/widgets/public
    
    	map_file						conf/map.conf
    	realm_file				conf/realms.conf
    	access_file			conf/access.conf
    	content_file		conf/content.conf
    	mime_file					conf/mime.types
    
    	user_doc_enable			"yes"
    	cgi_enable							 "yes"
    	cgi_dns_enable				"yes"
    	cgi_suffix_enable	 "yes"
    	cgi_user									 "nobody"
    	log_type									 "clf"
    	log_prefix							 "/var/http/server1/logs/widgets"
    	log_max_files					7
    	log_cycle_time				1440
    	log_max_file_size		1048576
    	ssi_enable								"yes"
    	ssi_exec										"yes"
    	ssi_xbithack					  "full"
    }
  10. 修改 /var/http/server1/websites/widgets/conf/map.conf


    map 	/cgi-bin/				 /var/http/widgets/cgi-bin/ 	cgi
    map 	/sws-icons/			/var/http/widgets/sws-icons/
Sun WebServer 1.0 access.acl 转换到 2.0
  1. 假定有下列 Sun WebServer 1.0 /etc/http/access.acl 文件和被代理文件 /var/http/widgets/widgets.acl

    • /etc/http/access.acl:


      url "/sws-administration" {
      	authentication_type			md5
      	realm																serverAdmin
      	password_file								 /etc/http/swsadmin.pw
      	+ user															 *
      }
      
      url "/statistics" {
      	authentication_type			basic
      	realm																statsRealm
      	password_file								/var/http/demo/stats/usrs
      	group_file											/var/http/demo/stats/grps
      	+ user															*
      }
      
      url "//widgets" {
      	delegate										/var/http/widgets/widgets.acl
      }
    • /var/http/widgets/widgets.acl:


      url "/" {
      	authentication_type			basic
      	realm																widgetsRealm
      	password_file								/var/http/widgets/users
      	group_file											/var/http/widgets/groups
      
      	+ user						 *
      	- user						 Joe
      	- group						thoseDenied
      }
  2. 创建一个全局 serverAdmin 领域(在 /etc/http/realms/ 中),并以 /etc/http/swsadmin.pw 替换其用户文件


    注意:

    如果领域已存在,则只运行复制命令。



    # htrealm add -r serverAdmin -s HTPASSWD
    # cp /etc/http/swsadmin.pw /etc/http/realms/serverAdmin/users
    
  3. 创建一个全局 statsRealm,并用上面 "/statistics" URL 中指定的那些文件替换其用户和组文件。将这个新领域添加到缺省站点和 widgets 站点的 realms.conf 文件中:


    注意:

    下面的 <hostname> 指工作站的主机名,用来指定缺省站点。



    # htrealm add -r statsRealm -s HTPASSWD
    # cp /var/http/demo/stats/usrs /etc/http/realms/statsRealm/users
    # cp /var/http/demo/stats/grps /etc/http/realms/statsRealm/groups
    # htrealm add -i server1 -h widgets -r statsRealm \
    	-s HTPASSWD -d /etc/http/realms/statsRealm
    # htrealm add -i server1 -h <hostname> -r statsRealm \
    	-s HTPASSWD -d /etc/http/realms/statsRealm
    
  4. 在 widgets 站点创建一个本地 widgetsRealm ,并用上面所指定的文件替换其用户和组文件:


    # htrealm add -i server1 -h widgets -r widgetsRealm -s HTPASSWD
    # cp /var/http/widgets/users \
    	var/http/server1/websites/widgets/conf/realms/widgetsRealm/
    # cp /var/http/widgets/groups \
    	/var/http/server1/websites/widgets/conf/realms/widgetsRealm/
    
  5. 修改 /etc/http/access.conf:


    url /sws-administration {
    	authentication_type				md5
    	realm																	serverAdmin
    
    	+ user																*
    }
  6. 修改 /var/http/server1/websites/default_site/conf/access.conf:


    # Specify /sws-administration ACL here for site administration,
    # 	create a siteAdmin realm and add administrators to that realm
    # url "/sws-administration" {
    # 	authentication_type			md5
    # 	realm																siteAdmin
    # 	+ user															*
    # }
    
    url "/statistics" {
    	authentication_type				basic
    	realm 																statsRealm
    
    	+ user																*
    }
  7. 修改 /var/http/server1/websites/widgets/conf/access.conf:


    # Specify /sws-administration ACL here for site administration
    url "/statistics" {
    	authentication_type				basic
    	realm																	statsRealm
    
    	+ user															*
    }
    
    url "/" {
    	authentication_type				basic
    	realm															 		widgetsRealm
    
    	+ user																*
    	- user																Joe
    	- group															thoseDenied
    }