zoukankan      html  css  js  c++  java
  • apache基本配置

    一、编译安装
    1、解决依赖关系
    
    安装httpd 2.4.4时首先需要解决依赖关系,httpd 2.4.4需要较新版本的aprapr-util。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。本文选择第一种方法来进行升级。在这里我们下载 apr-1.4.8.tar.bz2apr-util-1.6.0.tar.bz2版本。为了以后不必要的麻烦,在这里一定要保证系统时间正确,不正确的(data自行修改)aprapr-util的下载路径为:http://archive.apache.org/dist/apr/ 
    
    编译安装apr
    
    [root@proxy ~]# tar -xf apr-1.6.2.tar.bz2 
    
    [root@proxy ~]# cd apr-1.6.2/
    
    [root@proxy apr-1.6.2]# ./configure
    
    [root@proxy apr-1.6.2]# make
    
    [root@proxy apr-1.6.2]# make install
    
    [root@proxy apr-1.6.2]# rpm -q apr
    
    apr-1.4.8-3.el7.x86_64
    编译安装apr-util
    
    出现的错误:xml/apr_xml.c:35:19: error: expat.h: No such file or directory
    
    安装expat库:yum install expat-devel
    
    [root@proxy ~]# tar -xf apr-util-1.6.0.tar.gz 
    
    [root@proxy ~]# cd apr-util-1.6.0/
    
    [root@proxy ~]#./configure --with-apr=/usr/local/apr
    
    [root@proxy apr-1.6.2]# make
    
    [root@proxy apr-1.6.2]# make install
    
    [root@proxy apr-util-1.6.0]# rpm -q apr-util
    
    apr-util-1.5.2-6.el7.x86_64
    httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。
    [root@proxy apr-util-1.6.0]#yum -y install pcre-devel
    
    编译安装apache
    
    原先的主机上有apache,先要卸载
    [root@proxy ~]# rpm -e httpd
    
    错误:依赖检测失败:
    	httpd-mmn = 20120211x8664 (已安裝) php-5.4.16-36.el7_1.x86_64 需要
    [root@proxy ~]# rpm -e php
    
    [root@proxy ~]# rpm -e httpd
    [root@proxy ~]# tar -xf httpd-2.4.27.tar.gz 
    
    [root@proxy ~]# cd httpd-2.4.27/
    
    [root@proxy ~]#/configure --prefix=/usr/local/apache - --enable-so --enable-mpms-shared=all:prefork、worker、event --with-mpm=event --enable-ssl --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
    解释:
    --enable-so:支持动态共享模块,如果支持php将不能与apache一起工作。必须要有
    --enable-ssl:启用ssl功能,如果不启用将无法使用https
    
    --enable-mpms-shared=all:prefork、worker、event
    
    --with-mpm=event:event为默认
     --enable-rewrite:支持URL重写
    --enable-cgi :支持cgi
    
    --enable-cgid:httpd使用event或者worker得启用被线程方式访问
    --enable-modules=most :启用大多数模块
    --enable-mods-shared=most:启用大多数共享模块
    [root@proxy apr-1.6.2]# make
    
    [root@proxy apr-1.6.2]# make install
    
    [root@proxy apr-util-1.6.0]# rpm -q apr-util
    
    
    setenforce 0 关掉selinux。(临时关闭)
    永久关闭 vim /etc/selinux/config
    遇到的错误
    root@proxy httpd-2.4.27]# /usr/local/apache2/bin/apachectl start
    
    AH00557: httpd: apr_sockaddr_info_get() failed for proxy
    
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
    解决:
    只要在:vi /usr/local/apache2/conf/httpd.confServerName(或vim/etc/httpd/conf/httpd.conf)前面的“#”拿掉就好了
    
    
    二、三种不同的web虚拟主机
    基于不同域名
    [root@proxy ~]# cat /usr/local/apache2/conf/httpd.conf 
    
    <VirtualHost *:80>
    
        ServerName www.a.com
    
        DocumentRoot /var/www/html 
    
    </VirtualHost>
    
    <VirtualHost *:80>
    
            ServerName www.b.com
    
            DocumentRoot /var/www/web
    
    </VirtualHost>
    
    [root@proxy ~]# /usr/local/apache2/bin/apachectl restart
    
    [root@Client ~]# curl http://www.b.com
    
    aaa
    
    [root@Client ~]# curl http://www.b.com
    
    bbb
    基于不同端口
    [root@proxyt ~]# cat /usr/local/apache2/conf/httpd.conf
    
    <VirtualHost *:80>
    
        ServerName www.a.com
    
        DocumentRoot /var/www/html 
    
    </VirtualHost>
    
    <VirtualHost *:81>
    
            ServerName www.a.com
    
            DocumentRoot /var/www/web
    
    </VirtualHost>
    
    [root@proxy ~]# cat/usr/local/apache2/conf/httpd.conf
    
    Listen 80
    
    Listen 81
    
    [root@@proxy ~]# /usr/local/apache2/bin/apachectl restart
    
    [root@Client ~]# curl http://www.a.com:81
    
    bbb
    
    [root@Client ~]# curl http://www.a.com
    
    aaa
    基于不同ip
    
    [root@proxy ~]# cat /usr/local/apache2/conf/httpd.conf
    
    <VirtualHost 192.168.4.100:80>
    
        ServerName www.a.com
    
        DocumentRoot /var/www/html 
    
    </VirtualHost>
    
    <VirtualHost 192.168.2.101:80>
    
            ServerName www.a.com
    
            DocumentRoot /var/www/web
    
    </VirtualHost>
    
    [root@proxy ~]# /usr/local/apache2/bin/apachectl restart
    
    [root@Client ~]# curl http://192.168.4.100
    
    aaa
    
    [root@Client ~]# curl http://192.168.2.101
    
    Bbb
    三、网页内容访问控制
    客户机地址限制
    使用<Directory>配置区段
    --每个文件夹自动集成其父目录的ACL访问权限
    --除非针对子目录有明确设置
    <Directory 目录的绝对路径>
    
       Require all denied|granted
    
       Require ip IP或网段地址
    </Directory>
    
    SELinux策略保护
    标准的web目录
    用semanage工具可查看(semanage命令是用来查询与修改SELinux默认目录的安全上下文)
    [root@proxy~]# semanage fcontext -l |grep httpd_sys_content
    
    /srv/([^/]*/)?www(/.*)?                            all files          system_u:object_r:httpd_sys_content_t:s0 
    
    /var/www(/.*)?                                     all files          
    新建标准web目录时对的初始化(restorecon
    [root@proxy ~]# mkdir /web            
    
    [root@proxy ~]# mv /web/ /var/www/
    
    [root@proxy ~]# ls -Zd /var/www/web/        //显示安全上下文
    drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /var/www/web/
    
    [root@proxy ~]# restorecon -R /var/www/web/        //恢复SELinux文件属性即恢复文件的安全上下文
    [root@proxy ~]# ls -Zd /var/www/web/     
    
    drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/web/
    增加新的web目录
    方式一:参照标准目录,重设目录的属性
    chcon [-R] --reference=模板目录 新目录 
    
    例子:
    [root@proxy ~]# ls -Zd /var/www/html/            //模板目录
    drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
    [root@proxy ~]# mkdir /web                    //新目录
    [root@proxy ~]# ls -Zd /web/
    
    drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /web/
    
    [root@proxy ~]# chcon --reference=/var/www/html /web/        //重设目录属性
    [root@proxy ~]# ls -Zd /web/
    
    drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /web/
    方式二:将新目录增加到预设的标准web目录范围
    Semanage fcontext -a -t httpd_sys_content_t ‘新目录(/.*)?’
    
    [root@proxy ~]# mkdir /web1      //新建根下的wbb1
    
    [root@proxy ~]# semanage fcontext -a -t httpd_sys_content_t '/web1(/.*)?'  //设置web1的属性
    [root@proxy ~]# ls -Zd /web1            //查看没变化,这里要要用restorecon命令重设一下
    drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /web1
    
    [root@proxy ~]# restorecon -R /web1                //重设后查看
    [root@proxy ~]# ls -Zd /web1
    
    drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /web1
    
    [root@proxy ~]# mkdir -p /web1/web2     //在其目录下创建子目录属性会继承
    [root@proxy ~]# ls -Zd /web1/web2
    
    drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /web1/web2
    四、安全的web服务
    
    1HTTPS
    
    1.1. 什么是HTTPS
    
    HTTPSHypertextTransfer Protocol Secure)即安全的HTTPHTTPS的安全基础是安全套接层(Secure Sockets LayerSSL)。HTTP工作在应用层(OSI模型的最高层),SSL协议工作在一个较低的子层,位于TCP/IP协议和HTTP协议之间。在HTTP报文传输前对其加密,并在到达时对其解密。严格地讲,HTTPS并不是一个单独的协议,而是工作在SSL协议上的HTTP协议。
    TLSSSL进行了扩充,是SSL的继任者,但两者区别不大,以下讨论中不对TLSSSL做严格区分。
    
    
    HTTPS主要作用有两种:(1)确认通讯双方的身份,(2)建立安全通道,保证数据传输安全。
    1.2. HTTPS的主要作用
    1.2.1. 确认通讯双方的身份
    HTTPS通讯中,通过签名技术通讯双方可以确认对方身份。身份认证分为单向认证和双向认证。单向认证中只有服务器端有证书,双向认证中服务器和客户端都有证书。一般的HTTPS站点只有服务器有证书,而客户端无证书。
    单向认证是双向认证的简化版,本文讨论过程中如无特殊说明都认为是双向认证。
    1.2.2. 建立安全通道,保证数据传输安全
    基于SSL协议通讯双方可以协商一个用于对称加密的密钥,该密钥是一个难以破解的随机数,而且依赖通讯双方的证书、私钥等来协商。密钥协商好后,通讯双方用该密钥对数据进行加解密,从而保证数据安全。
    1.3. HTTPSHTTP协议的差异
    (1)HTTP URL是以“http://”开始,HTTPSURL是以“https://”开始;
    (2)HTTP默认端口为80HTTPS的默认端口为443(3)采用HTTPSWeb Server需要到CA申请证书;
    (4)HTTPSHTTP+SSL来实现,可进行加密传输、身份认证等,要比HTTP安全
    (5)HTTP的信息是明文传输,而HTTPS的信息是加密传输
    数字证书基础
    PKI公钥基础设施
    公钥:主要用来加密数据
    私钥:主要用来解密数据
    数字证书:证明拥有者的合法性/权威性
    Certificate Authority,数字整数授权中心:负责证书的申请、审核、颁发、鉴定、撤销等管理工作
    实现https加密的条件
    HTTPs加密web通信(tcp 443端口)
    --secure sockets layer ,安全套字层
    --transport layer security ,安全传输层协议
    实现条件
    --启用ssl模块支持
    --部署好加密素材:网站服务器的数字证书、网站服务器的私钥、根证书(CA管理机构的证书)
    [root@lxy ~]# yum -y install mod_ssl.x86_64
    
    部署证书、密钥相关文件 
    部署证书、密钥文件的部署路径
    --/etc/pki/tls/certs/证书文件.crt
    
    --/etc/pki/tls/private/私钥文件.key
    
    
    调整web服务器的配置
    配置要点
    指定ssl虚拟站点的DNS名称、网页根目录
    指定站点证书/根证书/站点密钥
    [root@proxy ~]# vim /usr/local/apache2/conf/extra/httpd-ssl.conf  
    
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    
    SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
    
    [root@proxy ~]# /usr/local/apache2/bin/apachectl restart
    五、部署动态网站
    部署WSGI动态环境
    1、装包(httpdmod_wsgi2、配置
    3、启服务
    <VirtualHost *:8909>
    
    Listen8909
    
        ServerName www.a.com
    
        DocumentRoot /var/www/html
    
       WSGIScripAlias / /var/www/html/.*.wsgi
    
    </VirtualHost>
    
    [root@proxy ~]# /usr/local/apache2/bin/apachectl restart
    selinux策略保护
    标准web端口
    使用sanmanage工具可查看
    [root@proxy ~]# semanage port -l |grep http_port
    
    http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
    当尝试监听非标配端口时,selinux会阻止
    调整允许开放其他web端口
    使用semanage工具
    [root@proxy ~]# semanage port -a -t http_port_t -p tcp 8909
    
    [root@proxy ~]# semanage port -l |grep http_port
    
    http_port_t                    tcp      8909, 80, 81, 443, 488, 8008, 8009, 8443, 9000
  • 相关阅读:
    for循环,pydev提示未使用的变量,解决办法
    sc 与net命令的区别
    Selenium测试Ajax程序(转)
    Python yield 使用浅析(转)
    python操作Excel读写--使用xlrd
    Python操作Mysql实例代码教程在线版(查询手册)
    MySQL之alter语句用法总结
    使用WebDriver遇到的那些坑(转)
    python 列表转为字典的两个小方法
    python
  • 原文地址:https://www.cnblogs.com/lxyqwer/p/7355912.html
Copyright © 2011-2022 走看看