apache基本配置

1、編譯安裝
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)前面的「#」拿掉就行了


2、三種不一樣的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

 

3、網頁內容訪問控制
客戶機地址限制
使用<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

 

4、安全的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
5、部署動態網站
部署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
相關文章
相關標籤/搜索