当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪linux openssl基础介绍           现行网上银行和电子商务等大型的网上交易系统普遍采用HTTP和SSL相结合的方式。服务器端采用支持SSL的Web服务器,用户端采用支持SSL的浏览器实现安全通信。     SSL是Secure Socket La.........
    ▪Apache Web让JSP“动”起来         ---- JSP是一种较为常用的动态网页制作技术,但Apache本身只支持静态网页,因此需要与其他特定的应用服务结合使用。本文要介绍的是一种将Apache与Tomcat服务相结合来支持JSP动态网页的最.........
    ▪Apache rewrite重写规则的常见应用         一、为什么需要用重写规则  ---- 网站的生命在于不断地进行更新和维护,根据业务发展的需求转移服务器进行维护、重新组织目录结构、变换URL甚至改变到新的域名等情况是经常发生.........

[1]linux openssl基础介绍
    来源: 互联网  发布时间: 2013-12-24

    现行网上银行和电子商务等大型的网上交易系统普遍采用HTTP和SSL相结合的方式。服务器端采用支持SSL的Web服务器,用户端采用支持SSL的浏览器实现安全通信。 
    SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。目前,利用公开密钥技术的SSL协议,已成为Internet上保密通讯的工业标准。本文着重在SSL协议和SSL程序设计两方面谈谈作者对SSL的理解。 
SSL协议初步介绍 
    安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。 
通过以上叙述,SSL协议提供的安全信道有以下三个特性: 
1.数据的保密性 
信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密匙来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密匙要用一个安全的方法传送。加密过的数据可以公开地传送。 
2.数据的一致性 
加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。 
3.安全验证 
加密的另外一个用途是用来作为个人的标识,用户的密匙可以作为他的安全验证的标识。 
    SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。目前,大部分的Web 服务器及浏览器都广泛支持SSL 技术。当浏览器试图连接一个具有SSL认证加密的服务器时,就会唤醒一个SSL会话,浏览器检查认证,必须具备下面三个条件: 
1)有一个权威机构发放证书,当然可以创建自我签订的证书(x509 结构)。 
2)证书不能过期。 
3)证书是属于它所连接的服务器的。 
    只有全部具备了这三个条件,浏览器才能成功完成认证。通过这三个条件,用户能确认其浏览器连接到正确的服务器,而不是连接到一些想盗取用户密码等重要信息的虚假的服务器上。 
    在当今的电子商务中还有一项被广泛使用的安全协议是SET协议。SET(Secure Electronic Transaction,安全电子交易)协议是由VISA和MasterCard两大信用卡公司于1997年5月联合推出的规范。SET能在电子交易环节上提供更大的信任度、更完整的交易信息、更高的安全性和更少受欺诈的可能性。SET交易分三个阶段进行:用户向商家购物并确定支付;商家与银行核实;银行向商家支付货款。每个阶段都涉及到RSA对数据加密,以及RSA数字签名。使用SET协议,在一次交易中,要完成多次加密与解密操作,故有很高的安全性,但SET协议比SSL协议复杂,商家和银行都需要改造系统以实现互操作。 
在Linux 下,比较流行支持SSL认证的是OpenSSL服务器。OpenSSL项目是一个合作的项目,开发一个健壮的、商业等级的、完整的开放源代码的工具包,用强大的加密算法来实现安全的Socket层(Secure Sockets Layer,SSL v2/v3)和传输层的安全性(Transport Layer Security,TLS v1)。这个项目是由全世界的志愿者管理和开发OpenSSL工具包和相关文档。 
     如何在Linux下配置OpenSSL服务器,首先从OpenSSL的主页()上下载openssl-version.tar.gz软件包来编译安装,与Apache服务器配合可以建立支持SSL的Web服务器,并可以使用自我签订的证书做认证,关于如何编译、安装OpenSSL服务器,可以参考一下OpenSSL HOWTO文档。 
SSL 程序设计初步介绍 
    SSL 通讯模型为标准的C/S 结构,除了在 TCP 层之上进行传输之外,与一般的通讯没有什么明显的区别。在这里,我们主要介绍如何使用OpenSSL进行安全通讯的程序设计。关于OpenSSL 的一些详细的信息请参考OpenSSL的官方主页 。 
在使用OpenSSL前,必须先对OpenSSL 进行初始化,以下的三个函数任选其一: 
SSL_library_init(void); 
OpenSSL_add_ssl_algorithms(); 
SSLeay_add_ssl_algorithms(); 
事实上 后面的两个函数只是第一个函数的宏。 
如果要使用OpenSSL的出错信息,使用SSL_load_error_strings (void)进行错误信息的初始化。以后可以使用void ERR_print_errors_fp(FILE *fp) 打印SSL的错误信息。 
一次SSL连接会话一般要先申请一个SSL 环境,基本的过程是: 
1. SSL_METHOD* meth = TLSv1_client_method(); 创建本次会话连接所使用的协议,如果是客户端可以使用 
SSL_METHOD* TLSv1_client_method(void); TLSv1.0 协议 
SSL_METHOD* SSLv2_client_method(void); SSLv2 协议 
SSL_METHOD* SSLv3_client_method(void); SSLv3 协议 
SSL_METHOD* SSLv23_client_method(void); SSLv2/v3 协议 
服务器同样需要创建本次会话所使用的协议: 
SSL_METHOD *TLSv1_server_method(void); 
SSL_METHOD *SSLv2_server_method(void); 
SSL_METHOD *SSLv3_server_method(void); 
SSL_METHOD *SSLv23_server_method(void); 
需要注意的是客户端和服务器需要使用相同的协议。 
2.申请SSL会话的环境 CTX,使用不同的协议进行会话,其环境也是不同的。申请SSL会话环境的OpenSSL函数是 
SSLK_CTX* SSL_CTX_new (SSL_METHOD*); 参数就是前面我们申请的 SSL通讯方式。返回当前的SSL 连接环境的指针。 
然后根据自己的需要设置CTX的属性,典型的是设置SSL 握手阶段证书的验证方式和加载自己的证书。 
void SSL_CTX_set_verify (SSL_CTX* , int , int* (int, X509_STORE_CTX*) ) 
设置证书验证的方式。 
第一个参数是当前的CTX 指针,第二个是验证方式,如果是要验证对方的话,就使用 SSL_VERIFY_PEER。不需要的话,使用SSL_VERIFY_NONE.一般情况下,客户端需要验证对方,而服务器不需要。第三个参数是处理验证的回调函数,如果没有特殊的需要,使用空指针就可以了。 
void SSL_CTX_load_verify_locations(SSL_CTX*, const char* , const char*); 
加载证书; 
第一个参数同上,参数二是证书文件的名称,参数三是证书文件的路径; 
int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); 
加载本地的证书;type 指明证书文件的结构类型;失败返回-1 
int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); 
加载自己的私钥;type 参数指明私钥文件的结构类型;失败返回-1 
加载了证书和文件之后,就可以验证私钥和证书是否相符: 
BOOl SSL_CTX_check_private_key (SSL_CTX*); 
3.既然SSL 使用TCP 协议,当然需要把SSL attach 到已经连接的套接字上了: 
SSL* SSL_new (SSL_CTX*); 申请一个SSL 套节字; 
int SSL_set_rfd (SSL*); 绑定只读套接字 
int SSL_set_wfd (SSL*); 绑定只写套接字 
int SSL_set_fd ( SSL*); 绑定读写套接字 
绑定成功返回 1, 失败返回0; 
4. 接下来就是SSL 握手的动作了 
int SSL_connect (SSL*); 失败返回 -1 
5. 握手成功之后,就可以进行通讯了,使用SSL_read 和SS_write 读写SSL 套接字代替传统的read 、write 
int SSL_read (SSL *ssl, char *buf, int num ); 
int SSL_write (SSL *ssl, char *buf, int num); 
如果是服务器,则使用 SSL_accept 代替传统的 accept 调用 
int SSL_accept(SSL *ssl); 
6. 通讯结束,需要释放前面申请的 SSL资源 
int SSL_shutdown(SSL *ssl); 关闭SSL套接字; 
void SSL_free (ssl); 释放SSL套接字; 
void SSL_CTX_free (ctx); 释放SSL环境; 
    OpenSSL 虽然已经发展到了0.9.96版本,但是它的文档还很少,甚至连最基本的man 函数手册都没有完成。所以,本文紧紧是讲述了使用OpenSSL 进行程序设计的框架。更加详细的资料可以参考OpenSSL 的文档或者 Apache mod_ssl 的文档。 
    通过以上的介绍,我想读者对SSL协议已经有了一定的了解,作者有机会将会继续给大家介绍SSL协议的其他方面的内容。 
(作者:张云帆)

    
[2]Apache Web让JSP“动”起来
    来源: 互联网  发布时间: 2013-12-24
 
---- JSP是一种较为常用的动态网页制作技术,但Apache本身只支持静态网页,因此需要与其他特定的应用服务结合使用。本文要介绍的是一种将Apache与Tomcat服务相结合来支持JSP动态网页的最新实用技术,即用"apache/jk"方式支持JSP动态网页。 
---- 起初,Apache与Tomcat结合支持JSP动态网页是通过一个名为"mod_jserv" 的插件来实现的。采用这种Apache/Jserv方式配置参数十分复杂,运行效率很低,而且对SSL(一种加密传输方式)的支持也不理想,因此Jakarta工作组新近开发了"mod_jk"插件,它很好地弥补了mod_jserv的缺点,而且能支持Apache以外的多种Web服务。 
---- 关于这种Apache/Jk方式的实现原理,大家可到网站上阅读有关资料,本文只简单介绍其实现的方法,对原理部分不做讨论。 
---- 一、在Unix平台上安装 
---- 本文以最常用的Solaris操作系统为例进行说明。 
---- (一)应用环境 
---- 在此,我们选用的操作系统为Solaris 2.7,而应用环境为Java 1.2(假定安装在/usr/java1.2目录下)、perl 5.005(假定安装在/usr/local/bin目录下)和gzip(假定安装在/usr/local/bin目录下)。 
---- (二)软件包的下载、编译与安装 
---- 1.下载地址 
---- 在可下载最新的Apache源代码软件包apache_1.3.19.tar.gz。 
---- 在可下载Tomcat源代码软件包jakarta-tomcat-3.2.1-src.tar.gz。 
---- 在可下载已编译的Tomcat应用软件包jakarta-tomcat-3.2.1.tar.gz。 
---- 2.编译与安装 
---- 假设各软件包已下载到当前的某个工作目录(如: /home/tmp)下,Apache和Tomcat将安装在/home目录下。在当前目录我们可以进行如下操作。 
(1)编译和安装Apache 应用服务 
①解包 
$ /usr/local/bin/gzip -dc ./ apache_1.3.19.tar.gz | tar xf - 
②编译 
$ cd apache_1.3.19 
$ ./configure --prefix=/home/apache-1.3.19 
--with-perl=/usr/local/bin/perl --enable-module=so  
假设perl的解释命令安装在/usr/local/bin 目录下, 
Apache服务安装在/home/apache-1.3.19 目录下。 
$ make 
③安装 
$ su 
# make install 
(2)编译与安装mod_jk插件 
①解包 
$ /usr/local/bin/gzip-dc jakarta-tomcat-3.2.1-src.tar.gz|tar xf- 
②编译 
$ cd jakarta-tomcat-3.2.1-src/src/native/apache1.3 
$ /home/apache-1.3.19/bin/apxs -o mod_jk.so -DSOLARIS -I../jk -I/ 
usr/java1.2/include-I/usr/java1.2/include/ 
solaris -lposix4 -c *.c ../jk/*.c 
假定Java安装在/usr/java1.2目录下。 
③安装 
$ su 
# /home/apache-1.3.19/bin/apxs -i -a -n jk mod_jk.so 
当屏幕显示如下内容时,表示安装成功。 
cp mod_jk.so /home/apache-1.3.19/libexec/mod_jk.so 
chmod 755 /home/apache- 
1.3.19/libexec/mod_jk.so 
[activating module `jk in /home/apache-1.3.19/conf/httpd.conf] 
(3)安装Tomcat服务 
用超级用户身份把已编译的Tomcat 3.2.1解包到/home目录下即可。 
$ su 
# /usr/local/bin/gzip -dc jakarta-tomcat-3.2.1.tar.gz| 
(cd /home;tar xf -) 
3.参数配置 
(1)配置Apache服务 
用vi命令打开Apache的配置文件httpd.conf。 
# cd /home/apache-1.3.19/conf 
# vi httpd.conf 
在末尾添加以下内容。 
JkWorkersFile /home/jakarta-tomcat-3.2.1/conf/workers.properties 
JkLogFile /home/apache-1.3.19/logs/mod_jk.log 
注意: 日志文件可根据具体情况调整。 
JkLogLevel warn 
JkMount /*.jsp ajp13 
JkMount /servlet/*.jsp ajp13 
注意: 关于该配置文件中其他重要的、但与Tomcat无关 
的参数(如Port和DocumentRoot等),可参见Apache的文档资料,本文不涉及。 
(2)配置Tomcat服务 
首先,修改server.xml文件。 
这里假定存放Apache的Web网页的根目录为/home/htdocs。 
# cd /home/jakarta-tomcat-3.2.1/conf 
# vi server.xml 
然后,在Connectors部分嵌入如下内容。 
< Connector className="org.apache.tomcat.service. 
PoolTcpConnector"> < Parameter name="handler" 
value="org.apache.tomcat.service.connector.Ajp 
13ConnectionHandler"/> 
< Parameter name="port" value="8009"/> 
< /Connector> 
接着,在 Special Webapps 部分嵌入如下内容。 
< Context path=" " 
docBase="/home/htdocs" 
debug="0" > 
< /Context> 
进一步修改workers.properties文件。 
# vi workers.properties 
... 
workers.tomcat_home=/home/jakarta-tomcat-3.2.1 
... 
workers.java_home=/usr/java1.2 
... 
ps=/ 
... 
随后,修改Tomcat 启动和关闭命令文件。 
# cd ../bin 
# vi startup.sh 
再在"BASEDIR=`dirname $0` "语句前嵌入如下内容。 
PATH=/usr/java1.2/bin:$PATH:. 
JAVA_HOME=/usr/java1.2 
TOMCAT_HOME=/home/jakarta-tomcat-3.2.1 
export PATH JAVA_HOME TOMCAT_HOME 
# vi shutdown.sh 
最后,在"BASEDIR=`dirname $0` "语句前嵌入如下内容。 
PATH=/usr/java1.2/bin:$PATH:. 
JAVA_HOME=/usr/java1.2 
TOMCAT_HOME=/home/jakarta-tomcat-3.2.1 
export PATH JAVA_HOME TOMCAT_HOME 
4.测试 
分别启动Apache和Tomcat。 
# /home/apache-1.3.19/bin/apachectl start 
# /home/jakarta-tomcat-3.2.1/bin/startup.sh 
然后,编辑简单的.jsp测试文件。 
# vi /home/apache/-1.3.19/htdocs/test.jsp 
< html> 
< head> 
< title> This is a jsp test file! 
< /title> 
< /head> 
< body> 
< % out.print("This is a jsp test file!n"); %> 
< /body> 
< /html> 
最后,进行网页浏览。 
---- 打开浏览器,访问该.jsp文件: http://主机名(或IP地址)/test.jsp。若屏幕显示如附图所示的内容,表示运行正常,此时,可以正常运行JSP动态网页文件了。 

二、在Windows NT/2000平台上安装 
---- 本文以Windows 2000平台为例。 
---- (一)应用环境 
---- 操作系统采用Windows 2000,应用环境为Java 1.2.2(假定已安装在c:jdk-1.2.2上)和Winzip。 
---- (二)软件包的下载与安装 
---- Windows NT2000上的安装比较简单,应用软件不必重新编译,只下载网站上已经编译好的软件包即可。 
---- 1.下载地址 
---- 在 可下载编译好的最新Apache软件包apache_1.3.19-Windows32-no_src-r2.msi。 
---- 在 可下载mod_jk.zip。 
---- 在可下载jakarta-tomcat-3.2.1.zip。 
---- 2. 安装 
---- 首先,双击"apache_1.3.19-Windows32-no_src-r2.msi",安装Apache 服务。 
---- 然后,将"mod_jk.zip"解压缩到Apache服务的"modules"子目录下;最后,将"jakarta-tomcat-3.2.1.zip"解压缩到C:目录下。 
---- 3.参数配置 
---- (1)修改Apache服务的配置文件httpd.conf 
---- 注意: 本文只涉及与Tomcat有关的参数,其余的参数设置可参考Apache的有关文档资料。 
---- 首先用鼠标点击 "开始"*"程序 "*"apache httpd server"*"configure apache server"*"edit configuration"。 
---- 然后,在"Dynamic Shared Object (DSO) Support"部分嵌入如下内容。 
LoadModule jk_module modules/mod_jk.dll 
最后,在文件尾部添加如下内容。 
JkWorkersFile c:jakarta-tomcat-3.2.1confworkers.properties 
JkLogFile c:jakarta-tomcat-3.2.1logsmod_jk.log 
JkLogLevel warn 
JkMount /*.jsp ajp13 
JkMount /servlet/* ajp13 
(2)配置Tomcat服务 
---- 对server.xml和workers.properties文件的参数调整,读者可参照Unix部分对应的段落。但读者要注意,对于不同层次的目录,Unix用"/"分隔,而Windows用""分隔。 
---- 分别编辑startup.bat和shutdown.bat文件,在文件的第2行嵌入如下内容。 
set TOMCAT_HOME=c:jakarta-tomcat-3.2.1 
set JAVA_HOME=c:jdk1.2.2 
set PATH=C:jdk1.2.2bin;.;%PATH%. 
4.测试 
参照Unix部分的对应段落进行测试。 
---- 本文只对apache/jk方式的配置和使用方法做了简单介绍,在Tomcat的配置文件(如server.xml)中还有很多参数可根据实际情况进行调整,这里不多介绍。有兴趣的读者可以参考配置文件中的提示信息或网站上的有关资料,进行进一步的调整与测试。 
---- (闫鹏 作者地址:北京市西城区三里河路58号国家信息中心中经网公司,100045) 

    
[3]Apache rewrite重写规则的常见应用
    来源: 互联网  发布时间: 2013-12-24
 
一、为什么需要用重写规则 
---- 网站的生命在于不断地进行更新和维护,根据业务发展的需求转移服务器进行维护、重新组织目录结构、变换URL甚至改变到新的域名等情况是经常发生的。为了让客户不会因此受到任何影响,最好的方法就是使用Apache Rewrite Rule(重写规则)。 
二、重写规则的作用范围 
---- 1.使用在Apache主配置文件httpd.conf中。 
---- 2.使用在httpd.conf里定义的配置中。 
---- 3.使用在基本目录的跨越配置文件.htaccess中。 
三、重写规则的应用条件 
---- 当用户的Web请求最终被导向到某台Web服务器的Apache守护进程,Apache根据配置文件判断该请求是主配置还是,再根据用户在浏览器中请求的URL来匹配重写规则,并且根据实际的请求路径匹配.htaccess中的重写规则,最后把请求的内容传回给用户。该响应可能有2种。 
---- 1.将请求内容外部重定向(Redirect)到另一个URL 
---- 让浏览器再次以新的URL发出请求(R=301或者R=302,临时的或是永久的重定向)。 
---- 例如,一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,或者网站改换成了新的域名,则把旧的域名重定向到新的域名。 
---- 2.由Apache内部子请求代理产生新的内容送回给客户[P,L] 
---- 这是Apache内部根据重写后的URL,通过代理模块请求内容并将最终内容送回给客户,客户端浏览器不必再次请求,浏览器中的URL不会被重写,但实际内容由Apache根据重写规则后的URL生成。 
---- 例如,在公司防火墙上运行的Apache启动这种代理重写规则,代理对内部网段上的Web服务器的请求。 
四、重写规则怎样工作 
---- 我们假定在编译Apache时已经把mod_rewrite编译成模块,确信您的httpd.conf中有LoadModule rewrite_module libexec/mod_rewrite.so,并且在Addmodule中有Addmodule mod_rewrite.c,则可以使用重写规则。 
---- 当外部请求到达Apache,Apache调用重写规则中的定义来重写由用户浏览器指定请求的URL,最后被重写的URL如果是重定向,则送交浏览器做再一次请求;如果是代理则把重写后的URL交给代理模块请求最终的内容(Content),最后把内容送回给浏览器。 
五、何时使用.htaccess中的重写规则定义 
---- 假如您对网站内容所在的服务器没有管理员权限,或者您的网站内容放在ISP的服务器上托管,无法改写主配置文件,但是您对Web站点内容所在的目录有写权限,则可以设置自己的.htaccess文件达到同样的目的。但您需要确定主配置文件中对您的网站所在的目录定义了下面的内容,否则您的.htaccess不会工作。 
---- < Directory /usr/local/apache/htdocs/www.abc.com> options indexes followsymLinks 
---- allowoverride all 
---- < /Directory > 
六、应用举例 
---- 假定Apache被编译安装在主机192.168.1.56的/usr/local/apache目录下面,同时编译了重写和代理模块。 
---- 1.隐藏Apache下的某个目录,使得对该目录的任何请求都重定向到另一个文件 
---- (1)httpd.conf的实现方法 
---- 我们将下面的部分放到/usr/local/apache/conf/httpd.conf中。 
---- < Directory "/usr/local/apache/htdocs/manual/"> options Indexes followsymlinks 
---- allowoverride all 
---- rewriteengine on 
---- rewritebase / 
---- rewriterule ^(.*)$ index.html.en [R=301] 
---- < /Directory > 
---- 注: “rewriteengine on”为重写引擎开关,如果设为“off”,则任何重写规则定义将不被应用,该开关的另一用处就是如果为了临时去掉重写规则,可以将引擎开关设为“off”再重新启动Apache即可,不必将其中的各条重写规则注释掉。 
---- “rewritebase /”的作用是如果在下面的rewriterule定义中被重写后的部分(此处为文件名index.html.en)前面没有“/”,则表明是相对目录,相对于这个rewritebase后面的定义也就是/usr/local/apache/htdocs/index.html.en,否则,如果此处没有“rewritebase /”这一项,则被重写成,显然是不正确的。 
---- 我们也可以不用“rewritebase /”,而是将其改为如下部分。 
---- rewriteengine on 
---- rewriterule ^(.*)$ /index.html.en [R=301] 
---- 或者更改为: 
---- rewriteengine on 
---- rewriterule ^(.*)$ [R=301] 
---- (2).htaccess的实现方法 
---- 我们将下面的部分放到httpd.conf中。 
---- < Directory "/usr/local/apache/htdocs/manual/"> options Indexes followsymlinks 
---- allowoverride all 
---- < /Directory > 
---- 然后将下面的部分放到/usr/local/apache/htdocs/manual/.htaccess中。 
---- rewriteengine on 
---- rewritebase / 
---- rewriterule ^(.*)$ index.html.en [R=301] 
---- 注: 对文件.htaccess所做的任何改动不需要重启动Apache。 
---- 您还可以利用.htaccess方案将这个manual目录重定向到用户jephe自己的主目录。 
---- rewriteengine on 
---- rewritebase /~jephe/ 
---- rewriterule ^(.*)$ $1 [R=301] 
---- 这样,对manual目录下任何文件的请求被重定向到~jephe目录下相同文件的请求。 
---- 2.将对于username的主页请求转换为对的请求 
---- 对于HTTP/1.1的请求包括一个Host: HTTP头,我们能用下面的规则集重写 .com/anypath到/home/username/anypath。 
---- rewriteengine on 
---- rewritecond %{HTTP_HOST} ^www.[^.]+.host.com$ 
---- rewriterule ^(.+) %{HTTP_HOST}$1 [C] 
---- rewriterule ^www.([^.]+).host.com(.*) /home/$1$2 
---- 注: “rewritecond”表明是条件重写规则,当满足后面定义的条件后才会应用下面的重写规则,“rewritecond”有各种变量,请查阅相关文档。 
---- 3.防火墙上的重写规则代理内部网段上服务器的请求 
---- NameVirtualhost 1.2.3.4 
---- < Virtualhost 1.2.3.4:80 > servername 
---- rewriteengine on 
---- proxyrequest on 
---- rewriterule ^/(.*)$ [P,L] 
---- < /Virtualhost > 
---- 注: 当外部浏览器请求时,将被解析到IP地址1.2.3.4,Apache交由mod_rewrite处理,转换成后再交由代理模块mod_proxy,得到内容后传送回用户的浏览器。 
---- 4.基本预先设定的转换Map表进行重写rewritemap 
---- 转换到Map表中规定的URL,前面是中的定义。 
---- rewritelog /usr/local/apache/logs/rewrite.log 
---- rewriteloglevel 9 
---- rewriteengine on 
---- proxyrequest on 
---- rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map 
---- rewriterule ^/([^/]+)+/(.*)$ [C] 
---- rewriterule (.*)::([a-z]+)$ ${sitemap:$2|http://h.i.j.k/} [R=301,L] 
---- 文件/usr/local/apache/conf/rewrite.map的内容如下: 
---- sg 
---- sh 
---- 注: 当用户请求时被重写为。当需要调试时请用rewritelog和 rewriteloglevel 9联合,9为最大,即得到最多的调试信息;最小为1,表示得到最少的调试信息;默认为0,表示没有调试信息。 
---- sitemap的语法是${sitemap: LookupKey | Defaultvalue},有些书上把$写成了%是错误的。 
(作者:吴阿亭)

    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
数据库 iis7站长之家
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3