• http 高级配置 虚拟主机,https 编译安装


    http 高级配置 虚拟主机,https 编译安装

    http 重定向 https

    将http请求转发至https的URL,防止客户在访问网站的时候,使用http协议头,而不使用https。造成不安全的连接。但是这个方法存在一个问题,因为他的连接步骤是这个样子的。而且他不存在记录一说,用户每次使用http来访问,他都会重定向一次。

    重定向
    Redirect [status] URL-path URL

    status状态:
    Permanent:Returns a permanent redirect status (301) indicating thatthe resource has moved permanently
    Temp:Returns a temporary redirect status (302). This is the default

    配置示例:

    vim /etc/httpd/conf.d/redirect.conf
    Redirect temp / https://www.magedu.com/
    

    HSTS

    HSTS:HTTP Strict Transport Security
    服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程。这样的话,只有第一次访问,才会是使用http协议,后面都自动默认https协议

    实现HSTS示例:

    vim /etc/httpd/conf.d/redirect.conf
    Header always set Strict-Transport-Security "max-age=31536000"
    RewriteEngine on
    RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]
    

    HSTS preload list

    是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表。当你的网址加入该列表后,使用浏览器访问该网站,只会使用https协议。

    http 自带的工具程序

    htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具
    apachectl:httpd自带的服务控制脚本,支持start和stop
    rotatelogs:日志滚动工具
    access.log -->
    access.log, access.1.log -->
    access.log, acccess.1.log, access.2.log

    httpd的压力测试工具

    httpd的压力测试工具

    • ab, webbench, http_load, seige
    • Jmeter 开源
    • Loadrunner 商业,有相关认证
    • tcpcopy:网易,复制生产环境中的真实请求,并将之保存

    ab [OPTIONS] URL,来自httpd-tools包

    • -n:总请求数
    • -c:模拟的并行数
    • -k:以持久连接模式测试
    • ulimit –n # 调整能打开的文件数

    实现状态页

    #vim /etc/httpd/conf.d/test.conf 
    <Location "/status">
        SetHandler server-status
        Require all granted
    </Location>
    

    反向代理功能

    启用反向代理

    特定URL反向代理

    示例:

    <VirtualHost *>
    ServerName www.magedu.com
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
    </VirtualHost>
    

    虚拟主机

    在一个物理服务上,搭建多个web站点,根据用户的访问。返回不同的站点

    站点标识: socket

    • IP相同,但端口不同
    • IP不同,但端口均为默认端口
    • FQDN不同: 请求报文中首部 Host: www.magedu.com

    有三种实现方案:

    • 基于ip:为每个虚拟主机准备至少一个ip地址
    • 基于port:为每个虚拟主机使用至少一个独立的port
    • 基于FQDN:为每个虚拟主机使用至少一个FQDN

    注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先禁用main主机
    禁用方法:注释中心主机的DocumentRoot指令即可

    配置格式

    <VirtualHost IP:PORT>
        ServerName FQDN
        DocumentRoot “/path"
    </VirtualHost>
    建议:上述配置存放在独立的配置文件中,不要写在http.conf中,方便管理
    
    其它可用指令:
    ServerAlias:虚拟主机的别名;可多次使用
    ErrorLog: 错误日志
    CustomLog:访问日志
    <Directory “/path"> </Directory>
    Alias
    

    基于IP的虚拟主机配置

    #给网卡添加多个地址
    ip a add 192.168.30.11/24 dev eth0
    ip a add 192.168.30.22/24 dev eth0
    ip a add 192.168.30.33/24 dev eth0
    
    <VirtualHost 192.168.30.11>
        #虚拟主机的别名;可多次使用,目前是不起作用的
        ServerName www.a.com
        #指定根目录
        DocumentRoot "/data/website1"
        #错误日志
        ErrorLog "logs/a.com-error_log"
        #访问日志
        TransferLog "logs/a.com-access_log"
    </VirtualHost>
    
    <VirtualHost 192.168.30.22>
        #虚拟主机的别名;可多次使用,目前是不起作用的
        ServerName www.b.com
        #指定根目录
        DocumentRoot "/data/website2"
        #错误日志
        ErrorLog "logs/b.com-error_log"
        #访问日志
        TransferLog "logs/b.com-access_log"
    </VirtualHost>
    
    <VirtualHost 192.168.30.33>
        #虚拟主机的别名;可多次使用,目前是不起作用的
        ServerName www.c.com
        #指定根目录
        DocumentRoot "/data/website3"
        #错误日志
        ErrorLog "logs/c.com-error_log"
        #访问日志
        TransferLog "logs/c.com-access_log"
    </VirtualHost>
    
    
    

    基于端口的虚拟主机配置

    vim /etc/http/conf.d/vhost.conf
    
    mkdir /data/website{1,2,3} -pv
    
    echo www.a.com > /data/website1/index.html
    echo www.b.com > /data/website2/index.html
    echo www.c.com > /data/website3/index.html
    
    多个网站就要使用多个不同的端口绑定
    
    listen 81
    listen 82
    listen 83
    
    
    创建虚拟主机
    #要绑定的IP和端口号
    <VirtualHost *:81>
        #虚拟主机的别名;可多次使用,目前是不起作用的
        ServerName www.a.com
        #指定根目录
        DocumentRoot "/data/website1"
        #错误日志
        ErrorLog "logs/a.com-error_log"
        #访问日志
        TransferLog "logs/a.com-access_log"
    </VirtualHost>
    
    #要分权限,配合虚拟主机目录使用
    <Directory "/data">
        Require all granted
    </Directory>
    
    将上述配置修改三份,对应上面的创建目录
    建议:上述配置存放在独立的配置文件中,如果是在centos7 分配虚拟主机,一定要给目录权限!!!否则无法访问!!!一定要给目录权限!!!否则无法访问!!!
    
    

    基于FQDN(主机头)的虚拟主机

    靠主机头的HOST地址来区分,根据不同的主机头,来返回不同的网站
    根据虚拟主机中定义的ServerName

    
    <VirtualHost *:80>
        #这就是指定的访问主机头
        ServerName www.a.com
        #指定根目录
        DocumentRoot "/data/website1"
        #错误日志
        ErrorLog "logs/a.com-error_log"
        #访问日志
        TransferLog "logs/a.com-access_log"
    </VirtualHost>
    
    <VirtualHost *:80>
        #这就是指定的访问主机头
        ServerName www.b.com
        #指定根目录
        DocumentRoot "/data/website2"
        #错误日志
        ErrorLog "logs/b.com-error_log"
        #访问日志
        TransferLog "logs/b.com-access_log"
    </VirtualHost>
    
    <VirtualHost *:80>
        #这就是指定的访问主机头
        ServerName www.c.com
        #指定根目录
        DocumentRoot "/data/website3"
        #错误日志
        ErrorLog "logs/c.com-error_log"
        #访问日志
        TransferLog "logs/c.com-access_log"
    </VirtualHost>
    
    

    centos 6 上实现的时候有一点差别,如果要实现基于名称(主机头)的虚拟主机,要加上NameVirtualHost 这一行,否则无法实现。
    centos 6 上实现的时候有一点差别,如果要实现基于名称(主机头)的虚拟主机,要加上NameVirtualHost 这一行,否则无法实现。
    centos 6 上实现的时候有一点差别,如果要实现基于名称(主机头)的虚拟主机,要加上NameVirtualHost 这一行,否则无法实现。

    这样就表示客户端 访问www.a.com就返回 a.com,访问b.com就返回b.com,访问c.com就返回c.com
    在浏览器敲网址的时候,比如www.a.com ,他不仅仅是DNS解析,还会向服务器发送 HOST : www.a.com 的标记
    如果是按网络地址(IP地址)来访问,那么是返回虚拟主机中的第一个,第一个就属于默认网站。

    搭建Https

    https = http + ssl

    创建CA服务器

    
     cd /etc/pki/CA
     
     #生成CA私钥
     (umask 077; openssl genrsa -out pirvate/cakey.pem 2048) 
    
    #创建自签名证书
    openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
    
    echo 01 > serial
    touch index.txt
    

    为服务器申请证书

    
    cd /etc/httpd/
    mkdir certs
    cd certs
    
     #生成私钥 
    (umask 077;openssl genrsa -out httpd.key 2048)
    
    #生成证书签署请求
    openssl req -new -key httpd.key -out httpd.csr -days 3655 
    
    #签名
    openssl ca -in httpd.csr -out httpd.crt -days 3655
    

    web服务器安装ssl 模块

    yum install mod_ssl 
    
    安装后会在/etc/pki/tls 下生成该包的一个私钥,一个自签名证书。
    所以如果不自己搭建CA,是可以直接使用的
    
    配置mod_ssl配置文件 ,在安装这个模块后,这个文件会自己生成
    vim /etc/httpd/conf.d/ssl.conf 
    
    #修改成我们自己的CA
    
    #指定证书
    SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt
    #指定私钥
    SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key
    #指定CA的路径 默认该行是注释状态的
    SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem
    
    重启服务
    service httpd restart
    
    注意:ssl会话只能基于IP创建,这意味着如果服务器仅有一个IP,那么仅为一个虚拟主机提供https服务
    
    
  • 相关阅读:
    HDU 5883 F
    关于codeblock 为什么不能调试
    Codeforces Round #378 (Div. 2) D. Kostya the Sculptor 分组 + 贪心
    51NOD 区间的价值 V2
    NYOJ 42 一笔画问题
    如何对二维字符数组进行排序
    hihoCoder 1383 : The Book List 北京网络赛
    利用IDA学习一个简单的安卓脱壳
    iOS APP可执行文件的组成
    Mac10.11 搭建php开发环境
  • 原文地址:https://www.cnblogs.com/ddz-linux/p/10699410.html
Copyright © 2020-2023  润新知