AppServer/

Apache下配置单IP多虚拟主机和HTTPS服务

发布
更新
字数
885
阅读
2 分钟

因工作需要,要为一台Web Server中的虚拟主机配置HTTPS.大致看了下文档,也参考了一下网上的资料.配置成功了.现做个笔记.
记得在网上找资料的时候,我下面笔记中的内容好象是对于Apache的版本有要求的,是多少不太记得了.我现在使用的是Apache的版本是2.2.23.

先大致讲下单IP的Apache的多虚拟主机的配置.
首先在httpd.conf中将

bash
Include etc/apache22/extra/httpd-vhosts.conf

注释去掉.

然后编辑/usr/local/etc/apache22/extra/httpd-vhosts.conf内容,如下:

bash
NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot /usr/local/www/apache22/data/mydomain1.com
    ServerName mydomain1.com:80

    <Directory /usr/local/www/apache22/data/mydomain1.com>
        Options FollowSymLinks
        AllowOverride All
        Order deny,allow
        Allow from all
    </Directory>

    ErrorDocument 404 error.php
    CustomLog "|/usr/local/sbin/rotatelogs /var/log/httpd/mydomain1.com/access.%Y%m%d.log 86400" common
    ErrorLog "|/usr/local/sbin/rotatelogs /var/log/httpd/mydomain1.com/error.%Y%m%d.log 86400"

</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /usr/local/www/apache22/data/mydomain2.com
    ServerName mydomain1.com:80

    <Directory /usr/local/www/apache22/data/mydomain2.com>
        Options FollowSymLinks
        AllowOverride All
        Order deny,allow
        Allow from all
    </Directory>

    ErrorDocument 404 error.php
    CustomLog "|/usr/local/sbin/rotatelogs /var/log/httpd/mydomain2.com/access.%Y%m%d.log 86400" common
    ErrorLog "|/usr/local/sbin/rotatelogs /var/log/httpd/mydomain2.com/error.%Y%m%d.log 86400"

</VirtualHost>

然后重启Apache

bash
/usr/local/etc/rc.d/apahce22 restart

就可以完成虚拟主机的设置了.

然后再讲讲有关HTTPS的设置.
先在httpd.conf文件中将有关ssl的注释去掉.有两个地方:

bash
# 加载SSL模块
LoadModule ssl_module modules/mod_ssl.so
bash
# 加载ssl的配置文件
Include conf/extra/httpd-ssl.conf

然后生成证书,我们的证书是使用openssl来加密的,如果没有安装,就要先安装openssl:

bash
cd /usr/ports/security/openssl
make install clean

然后再调用openssl来生成服务器证书私钥文件:

bash
openssl genrsa -out server.key 2048

然后再用私钥文件生成证书请求文件:

bash
openssl req -new -key server.key -out certreq.csr

然后需要填写一些相关的域名信息,填写完成之后会生成一个certreq.csr文件.
如果是有申请公有证书,则可以把这个csr文件发给证书核发方,等待对方签发服务器公有证书.
证书一般是以”—–BEGIN CERTIFICATE—–“开头和以”—–END CERTIFICATE—–“结束的.假设这里我们得到的证书名称是server.crt

编辑/usr/local/etc/apahce22/extra/httpd-ssl.conf文件,修改如下:

bash
Listen 443
NameVirtualHost *:443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl

SSLPassPhraseDialog  builtin

SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout  300

SSLMutex  "file:/var/run/ssl_mutex"

<VirtualHost *:443>

    DocumentRoot "/usr/local/www/apache22/data/mydomain1.com"
    ServerName mydomain1.com
    ServerAdmin admin@mydomain1.com

    ErrorLog "|/usr/local/sbin/rotatelogs /var/log/httpd/mydomain1.com/error.%Y%m%d.log 86400"
    TransferLog "/var/log/httpd/mydomain1.com/httpd-access.log"

    SSLEngine on

    SSLProtocol all -SSLv2

    SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

    SSLCertificateFile "/usr/local/etc/apache22/ssl_key/server.crt"
    SSLCertificateKeyFile "/usr/local/etc/apache22/ssl_key/server.key"
    #如果有另外一张CA中级证书,则需要启用这一行
    #SSLCertificateChainFile "/usr/local/etc/apache22/ssl_key/ca.crt"

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "/usr/local/www/apache22/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-5]" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0

    CustomLog "|/usr/local/sbin/rotatelogs /var/log/httpd/mydomain1.com/ssl_request.%Y%m%d.log 86400" \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

然后重新启动Apache:

bash
/usr/local/etc/rc.d/apache22 restart

然后再试试,大功告成!

评论

正在载入评论…

留下评论

人机验证
四位数字,看不清可点击图片刷新

评论经审核后显示。

回到顶部 ↑