apache基本配置

pre.ctl { font-family: "Liberation Mono", monospace }
p { margin-bottom: 0.25cm; line-height: 120% }

一、编译安装
1、解决依赖关系

安装httpd 2.4.4时首先需要解决依赖关系,httpd 2.4.4需要较新版本的apr和apr-util。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。本文选择第一种方法来进行升级。在这里我们下载 apr-1.4.8.tar.bz2与apr-util-1.6.0.tar.bz2版本。为了以后不必要的麻烦,在这里一定要保证系统时间正确,不正确的(data自行修改)。
apr和apr-util的下载路径为:http://archive.apache.org/dist/apr/ 

编译安装apr
[[email protected] ~]# tar -xf apr-1.6.2.tar.bz2 

[[email protected] ~]# cd apr-1.6.2/

[[email protected] apr-1.6.2]# ./configure

[[email protected] apr-1.6.2]# make

[[email protected] apr-1.6.2]# make install

[[email protected] 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
[[email protected] ~]# tar -xf apr-util-1.6.0.tar.gz 

[[email protected] ~]# cd apr-util-1.6.0/

[[email protected] ~]#./configure --with-apr=/usr/local/apr

[[email protected] apr-1.6.2]# make

[[email protected] apr-1.6.2]# make install

[[email protected] apr-util-1.6.0]# rpm -q apr-util

apr-util-1.5.2-6.el7.x86_64
httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。
[[email protected] apr-util-1.6.0]#yum -y install pcre-devel

编译安装apache

原先的主机上有apache,先要卸载
[[email protected] ~]# rpm -e httpd

错误:依赖检测失败:
	httpd-mmn = 20120211x8664 被 (已安裝) php-5.4.16-36.el7_1.x86_64 需要
[[email protected] ~]# rpm -e php

[[email protected] ~]# rpm -e httpd
[[email protected] ~]# tar -xf httpd-2.4.27.tar.gz 

[[email protected] ~]# cd httpd-2.4.27/

[[email protected] ~]#/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:启用大多数共享模块
[[email protected] apr-1.6.2]# make

[[email protected] apr-1.6.2]# make install

[[email protected] apr-util-1.6.0]# rpm -q apr-util

setenforce 0 关掉selinux。(临时关闭)
永久关闭 vim /etc/selinux/config
遇到的错误
[email protected] 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.conf中ServerName(或vim/etc/httpd/conf/httpd.conf)前面的“#”拿掉就好了

二、三种不同的web虚拟主机
基于不同域名
[[email protected] ~]# 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>

[[email protected] ~]# /usr/local/apache2/bin/apachectl restart

[[email protected] ~]# curl http://www.b.com

aaa

[[email protected] ~]# curl http://www.b.com

bbb
基于不同端口
[[email protected] ~]# 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>

[[email protected]xy ~]# cat/usr/local/apache2/conf/httpd.conf

Listen 80

Listen 81

[[email protected]@proxy ~]# /usr/local/apache2/bin/apachectl restart

[[email protected] ~]# curl http://www.a.com:81

bbb

[[email protected] ~]# curl http://www.a.com

aaa
基于不同ip
[[email protected] ~]# 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>

[[email protected] ~]# /usr/local/apache2/bin/apachectl restart

[[email protected] ~]# curl http://192.168.4.100

aaa

[[email protected] ~]# curl http://192.168.2.101

Bbb
三、网页内容访问控制
客户机地址限制
使用<Directory>配置区段
--每个文件夹自动集成其父目录的ACL访问权限
--除非针对子目录有明确设置
<Directory 目录的绝对路径>

   Require all denied|granted

   Require ip IP或网段地址
</Directory>

ELinux策略保护
标准的web目录
用semanage工具可查看(semanage命令是用来查询与修改SELinux默认目录的安全上下文)
[[email protected]~]# 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)
[[email protected] ~]# mkdir /web            

[[email protected] ~]# mv /web/ /var/www/

[[email protected] ~]# ls -Zd /var/www/web/        //显示安全上下文
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /var/www/web/

[[email protected] ~]# restorecon -R /var/www/web/        //恢复SELinux文件属性即恢复文件的安全上下文
[[email protected] ~]# 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=模板目录 新目录 

例子:
[[email protected] ~]# ls -Zd /var/www/html/            //模板目录
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[[email protected] ~]# mkdir /web                    //新目录
[[email protected] ~]# ls -Zd /web/

drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /web/

[[email protected] ~]# chcon --reference=/var/www/html /web/        //重设目录属性
[[email protected] ~]# 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 ‘新目录(/.*)?’
[[email protected] ~]# mkdir /web1      //新建根下的wbb1

[[email protected] ~]# semanage fcontext -a -t httpd_sys_content_t ‘/web1(/.*)?‘  //设置web1的属性
[[email protected] ~]# ls -Zd /web1            //查看没变化,这里要要用restorecon命令重设一下
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /web1

[[email protected] ~]# restorecon -R /web1                //重设后查看
[[email protected] ~]# ls -Zd /web1

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /web1

[[email protected] ~]# mkdir -p /web1/web2     //在其目录下创建子目录属性会继承
[[email protected] ~]# ls -Zd /web1/web2

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /web1/web2

pre.ctl { font-family: "Liberation Mono", monospace }
p { margin-bottom: 0.25cm; line-height: 120% }

四、安全的web服务

1、HTTPS

1.1. 什么是HTTPS

HTTPS(HypertextTransfer Protocol Secure)即安全的HTTP。HTTPS的安全基础是安全套接层(Secure Sockets Layer,SSL)。HTTP工作在应用层(OSI模型的最高层),SSL协议工作在一个较低的子层,位于TCP/IP协议和HTTP协议之间。在HTTP报文传输前对其加密,并在到达时对其解密。严格地讲,HTTPS并不是一个单独的协议,而是工作在SSL协议上的HTTP协议。
TLS对SSL进行了扩充,是SSL的继任者,但两者区别不大,以下讨论中不对TLS和SSL做严格区分。

HTTPS主要作用有两种:(1)确认通讯双方的身份,(2)建立安全通道,保证数据传输安全。
1.2. HTTPS的主要作用
1.2.1. 确认通讯双方的身份
HTTPS通讯中,通过签名技术通讯双方可以确认对方身份。身份认证分为单向认证和双向认证。单向认证中只有服务器端有证书,双向认证中服务器和客户端都有证书。一般的HTTPS站点只有服务器有证书,而客户端无证书。
单向认证是双向认证的简化版,本文讨论过程中如无特殊说明都认为是双向认证。
1.2.2. 建立安全通道,保证数据传输安全
基于SSL协议通讯双方可以协商一个用于对称加密的密钥,该密钥是一个难以破解的随机数,而且依赖通讯双方的证书、私钥等来协商。密钥协商好后,通讯双方用该密钥对数据进行加解密,从而保证数据安全。
1.3. HTTPS与HTTP协议的差异
(1)HTTP 的URL是以“http://”开始,HTTPS的URL是以“https://”开始;
(2)HTTP默认端口为80,HTTPS的默认端口为443;
(3)采用HTTPS的Web Server需要到CA申请证书;
(4)HTTPS由HTTP+SSL来实现,可进行加密传输、身份认证等,要比HTTP安全
(5)HTTP的信息是明文传输,而HTTPS的信息是加密传输
数字证书基础
PKI公钥基础设施
公钥:主要用来加密数据
私钥:主要用来解密数据
数字证书:证明拥有者的合法性/权威性
Certificate Authority,数字整数授权中心:负责证书的申请、审核、颁发、鉴定、撤销等管理工作
实现https加密的条件
HTTPs加密web通信(tcp 443端口)
--secure sockets layer ,安全套字层
--transport layer security ,安全传输层协议
实现条件
--启用ssl模块支持
--部署好加密素材:网站服务器的数字证书、网站服务器的私钥、根证书(CA管理机构的证书)
[[email protected] ~]# yum -y install mod_ssl.x86_64

部署证书、密钥相关文件
部署证书、密钥文件的部署路径
--/etc/pki/tls/certs/证书文件.crt

--/etc/pki/tls/private/私钥文件.key

调整web服务器的配置
配置要点
指定ssl虚拟站点的DNS名称、网页根目录
指定站点证书/根证书/站点密钥
[[email protected] ~]# 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

[[email protected] ~]# /usr/local/apache2/bin/apachectl restart

pre.ctl { font-family: "Liberation Mono", monospace }
p { margin-bottom: 0.25cm; line-height: 120% }

五、部署动态网站
部署WSGI动态环境
1、装包(httpd、mod_wsgi)
2、配置
3、启服务
<VirtualHost *:8909>

Listen8909

    ServerName www.a.com

    DocumentRoot /var/www/html

   WSGIScripAlias / /var/www/html/.*.wsgi

</VirtualHost>

[[email protected] ~]# /usr/local/apache2/bin/apachectl restart
selinux策略保护
标准web端口
使用sanmanage工具可查看
[[email protected] ~]# semanage port -l |grep http_port

http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
当尝试监听非标配端口时,selinux会阻止
调整允许开放其他web端口
使用semanage工具
[[email protected] ~]# semanage port -a -t http_port_t -p tcp 8909

[[email protected] ~]# semanage port -l |grep http_port

http_port_t                    tcp      8909, 80, 81, 443, 488, 8008, 8009, 8443, 9000
时间: 2025-01-13 23:54:29

apache基本配置的相关文章

Apache 性能配置优化

前言 最近在进行apache性能优化设置.在修改apache配置)文件之前需要备份原有的配置文件夹conf,这是网站架设的好习惯.以下的apache配置调优均是在red had的环境下进行的. httpd 相关查看命令了解 查看当前安装模块mpm(多路处理器) [[email protected] ~]# httpd -l 查看httpd进程数(即各个mpm模式下Apache能够处理的并发请求数) [[email protected] ~]# ps -ef | grep httpd | wc -

Apache的配置详解,最好的Apache配置文档

http://blog.csdn.net/apple_llb/article/details/50253889 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改. 主站点的配置(基本配置) (1) 基本配置: ServerRoot "/mnt/software/apache2" #你的apache软件安装的位置.其它指定的目录如果没有指定绝对路径,则目录是相对于该目录. PidFile logs/httpd.pid #第一个htt

apache https配置步骤

apache https配置步骤 1.  确认是否安装ssl模块 是否有mod_ssl.so文件 2.  生成证书和密钥 linux下 步骤1:生成密钥 命令:openssl genrsa 1024 > server.key 说明:这是用128位rsa算法生成密钥,得到server.key文件 步骤2: 生成证书请求文件 命令:openssl req -new -key server.key > server.csr 说明:这是用步骤1的密钥生成证书请求文件server.csr, 这一步提很多

Apache之——配置虚拟主机

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/48140649 一.修改httpd.conf文件 首先我们在Apache的安装目录的conf下,找到httpd.conf文件,如下图: 打开文件,在文件中找到如下代码: DocumentRoot "D:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs" 这行代码代表的是apache的默认访问路

Apache之——配置虚拟目录

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/48142201 一.配置 Apache配置虚拟目录主要是修改httpd.conf文件就可以了. 打开httpd.conf文件,找到如下代码: <IfModule dir_module> DirectoryIndex index.html </IfModule> 如图所示: 在这段代码的下面添加如下代码: #配置虚拟目录 <IfModule dir_module&

Apache+Php配置(亲测可用)

引言: 在软件项目中,Maven提供了一体化的类库管理系统,非常实用.但是,如果新增的类库jar在网络上无法获取到,如何在本地按照Maven的规则添加进来呢?本文将通过一个小例子展示新增过程. 背景介绍: 一个Maven管理的Java项目,提供一个系统级别的POM.xml,其中定义了整个项目使用的类库. 需求: 需要添加一个自定义的类库到当前项目中.假定当前的类库文件名为:abc.jar.. 如何将类库添加进来? 1.  找到当前Maven的Repository类库位置 一般默认情况下,在win

Apache安装配置步骤

注释:这里以Linux 红帽商业版为例~~~~~~~纯手打啊 Apache安装配置步骤 准备:关闭其他虚拟设备 #/etc/init.d/libvirtd stop #/etc/init.d/xend stop #chkconfig libvirtd off #chkconfig xend off 一.安装步骤 1.把光驱载入到系统当中: 2.安装 二.配置步骤 1.配置IP地址: 2.进入/etc/httpd/conf目录,使用cp命令备份配置文件(httpd.conf),并用vim打开 3.

【只需3步】手动安装Apache以及配置(亲测可行)

redhat6采用centos yum源. 第一步下载apache依赖的软件包并安装 安装 apr下载地址:http://apr.apache.org/download.cgi 解压包:tar -jxvf apr-1.5.0.tar.bz2 注意:这里的包的格式是tar.bz2格式,如果是.tar格式的用 tar -zxvf +包的名字 命令解压. 进入该包的文件夹内,依次执行以下命令: ./configure --prefix=/work/installed/apr (注意:configure

apache中配置php支持模块模式、cgi模式和fastcgi模式

apache中配置php支持模块模式.cgi模式和fastcgi模式 首先安装apache.MySQL和PHP,依次顺序安装. 1.apache.mysql的安装比较简单,略过 2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了. ./configure –prefix=/usr/local/php5 /--with-mysql=/usr/local/mysql /--enable-fpm--with-apxs2=/usr/local/apache/bi

JSP / JDK和Apache的配置

系统环境:Windows7 x64 Ultimate chs 1.首先安装jdk,可以再oracle官网下载到,此处安装jdk6.0版本. 2.配置jdk环境变量: 我的电脑-->属性-->高级系统设置-->高级-->环境变量--> 新建系统变量:变量名:JAVA_HOME变量值:C:\Program Files (x86)\Java\jdk1.6.0_11 新建用户变量:变量名:CLASS_PATH变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\