WordPress是主流的内容管理系统(CMS),网上大部分博客和中小型企业官网由WordPress搭建,它依赖Apache和Nginx等Web服务器;Intraweb是独立服务(Standalone),自带 HTTP(S) 服务器,可独立运行。用WordPress开发的网站与用Intraweb开发的网站,是否可以发布在同一台服务器上?以及各自启用https协议呢?答案是肯定的,下面详解配置方法。
接下来的例子中,www.jh1999.cn 是用WordPress开发的网站,zupu.jh1999.cn 是用Intraweb开发的网站,发布在同一台服务器上。
一台服务器上要发布多个网站时,需要启用虚拟主机。常规情况下,www.jh1999.cn作为一个虚拟主机,用所在目录来辨识,端口一般是http(80)和https(443),服务器监听这两个端口即可。zupu.jh1999.cn是独立服务器,它作为一个虚拟主机,不能用所在目录来识别,只能绑定不同的端口来识别,这是最关键的区别。本例中绑定的端口是http(8007)和https(8008),绑定的IP地址是0.0.0.0,原因可以另开一篇文章来解说。
本文的重点是WordPress与Intraweb共处一机并启用SSL,前期工作要确保 http://www.jh1999.cn 和 http://zupu.jh1999.cn:8007 能正常访问。
接下来修改配置文件【httpd.conf】,Apache里可用的模块无穷多,启用的越多,系统就越慢,增加启用下面四个模块即可。
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
它们的作用分别是:
- 启用 URL 重写(Rewrite)功能。
- 启用 HTTPS / SSL/TLS 加密支持
- 启用通用代理功能(基础模块)
- 启用 HTTP/HTTPS 反向代理功能。
第二步配置四个虚拟主机【httpd-vhosts.conf】
#jh1999
<VirtualHost *:80>
ServerAdmin sandal@jh1999.cn
DocumentRoot "D:/jh1999cn"
ServerName www.jh1999.cn
ErrorLog "D:/logs/error_ss.log"
CustomLog "D:/logs/access_ss.log" common
</VirtualHost>
这是 http://www.jh1999.cn 网站的配置,只需要指定网站根目录所在的物理目录,以及日志存放目录。
#jh1999-ssl
<VirtualHost *:443>
ServerAdmin sandal@jh1999.cn
DocumentRoot "D:\jh1999cn"
ServerName www.jh1999.cn
ErrorLog "D:/logs/error.log"
TransferLog "D:/logs/access.log"
SSLEngine on
SSLCertificateFile "${SRVROOT}/conf/www.jh1999.cn-chain.pem"
SSLCertificateKeyFile "${SRVROOT}/conf/www.jh1999.cn-key.pem"
</VirtualHost>
这是 https://www.jh1999.cn 网站的配置,监听端口是默认的443,指定根目录位置,日志存放位置,打开SSL开关,并指定SSL证书的位置。
#jhZupu-IW
<VirtualHost *:80>
ServerAdmin sandal@jh1999.cn
ServerName zupu.jh1999.cn
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8007/
ProxyPassReverse / http://127.0.0.1:8007/
</VirtualHost>
这是 http://zupu.jh1999.cn 网站的配置,它的监听端口也是默认的80,而不是8007,相比www.jh1999.cn网站,它打开了反向代理(ProxyPreserveHost)开关,并指明了将用户发来的请求转发给后端服务器的地址和端口,并且修改后端服务器返回的 HTTP 响应头中的 URL,使其对用户透明。ProxyPass和ProxyPassReverse总是成对出现。
#jhZupu-IW-ssl
<VirtualHost *:443>
ServerAdmin sandal@jh1999.cn
ServerName zupu.jh1999.cn
SSLEngine on
SSLCertificateFile "D:/jhZupu/cert.pem"
SSLCertificateKeyFile "D:/jhZupu/key.pem"
ProxyPreserveHost On
SSLProxyEngine On
ProxyPass / https://127.0.0.1:8008/
ProxyPassReverse / https://127.0.0.1:8008/
</VirtualHost>
这是 https://zupu.jh1999.cn 网站的配置,它的SSL监听端口是默认的443,而不是Intraweb绑定的8008,相比 https://www.jh1999.cn网站,它增加了 ProxyPreserveHost 和 SSLProxyEngine 两个开关的开放,意思是:让后端服务器看到原始的 Host 请求头,而不是代理服务器的地址,以及启用 Apache 作为 HTTPS 客户端,去连接后端的 HTTPS 服务。再指明将用户发来的https请求转发给后端服务器的地址和端口,同样的,ProxyPass和ProxyPassReverse总是成对出现。
通过上述方案,在同一台服务器上,四个协议和架构完全不同的网站,和谐地相处一机,传统的通过DNS做域名别名解析和自动跳转解析,都不需要了,而且网址显示的更加干净和专业。
