Apache網站服務器

源自《Linux 運維之道》丁一明編著 一書的總結php

  Apache HTTP Server項目是在Windows和UNIX等平臺上能夠運行的跨平臺開源HTTP服務器的軟件,該項目的目標是提供安全、高效、可擴展的HTTP服務。Apache HTTP Server很是重要的是它採用了模塊化設計模型,Apache模塊分爲靜態模塊和動態模塊,靜態模塊是Apache是最基本的模塊,是沒法隨時添加和卸載的模塊,靜態模塊在編譯軟件時設定。動態模塊是能夠隨時添加和刪除的模塊,這樣的設計師的企業部署Apache時能夠得到最大的靈活性。Apache模塊將被編譯爲動態共享對象(DSO),這些動態共享對象獨立於httpd程序,DSO模塊能夠在編譯Apache添加的,也能夠在後期隨時經過Apache Extension Tool(apxs)工具編譯添加模塊。可使用httpd –M命令查看模塊加載清單。html

下載並安裝web

[root@localhost tempal]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.9.tar.gz正則表達式

[root@localhost tempal]# wget http://mirror.bjtu.edu.cn/apache/apr/apr-util-1.5.3.tar.gzapache

[root@localhost tempal]# wget http://mirror.bjtu.edu.cn/apache/apr/apr-1.5.1.tar.gz安全

安裝依賴的軟件:服務器

[root@localhost tempal]# yum -y install gcc autoconf automake make pcre pcre-devel openssl openssl-devel運維

[root@localhost tempal]# tar -xzf httpd-2.4.9.tar.gz -C /usr/src/dom

[root@localhost tempal]# tar -xzf apr-1.5.1.tar.gz -C /usr/src/socket

[root@localhost tempal]# tar -xzf apr-util-1.5.3.tar.gz -C /usr/src/

[root@localhost tempal]# cd /usr/src/apr-1.5.1/

[root@localhost apr-1.5.1]# ./configure

[root@localhost apr-1.5.1]# make && make install

[root@localhost apr-1.5.1]# cd /usr/src/apr-util-1.5.3/

[root@localhost apr-util-1.5.3]# ./configure --with-apr=/usr/local/apr/

[root@localhost apr-util-1.5.3]# make && make install

[root@localhost httpd-2.4.9]# ./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl --enable-rewrite --with-mpm=worker --with-suexec-bin --with-apr=/usr/local/apr/

[root@localhost httpd-2.4.9]# make && make install

能夠經過./configure –help查看腳本支持的

選項

描述

--prefix

指定Apache httpd程序的主安裝目錄

--enable-so

開啓模塊化功能,支持DSO(動態共享對象)

--enable-ssl

支持SSL加密

--enable-rewrite

支持地址重寫

--with-mpm

設置Apache httpd工做模式

--with-suexec-bin

支持SUID、SGID

--withapr

支持apr程序絕對路徑

啓動服務:

[root@localhost ~]# /usr/local/apache2/bin/apachectl start

[root@localhost ~]# netstat -tulnp | grep http

[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

[root@localhost ~]# service iptables save

安裝後,Apache會提供名爲apachectl啓動腳本。腳本在/usr/local/apache2/bin目錄下,該腳本用來進行Apache httpd的啓動、關閉以及測試功能,具體的參數見下表。

參數

描述

Start

啓動httpd程序

Stop

關閉httpd程序

Restart

重啓httpd程序

Graceful

啓動httpd,不中斷現有的http鏈接請求

Graceful-stop

關閉httpd,不中斷現有的http鏈接

Status

查看httpd程序當前狀態

Configtest

檢測httpd主配置語法

沒有修改配置文件的狀況下用start啓動httpd程序,可能返回錯誤提示:

[root@localhost ~]# /usr/local/apache2/bin/apachectl start

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message

(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80

(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80

no listening sockets available, shutting down

AH00015: Unable to open logs

可是確實服務已經啓動了。

image

  配置文件解析:

  配置文件默認在/usr/local/apache2/conf目錄下,該目錄的主要配置文件是httpd.conf文件。還有一些位於extra目錄下的附加配置文件。主配置文件以容器組成,容器使用<容器名稱>開始,以</容器名稱>結尾,容器的指令通常僅在容器內有效。

² SeverRoot指令:設置Apache軟件的安裝主目錄,若是採用源碼安裝,這默認路徑是/usr/local/apache2

² Listen指令:設置服務器監聽IP和端口號。語法格式爲:Listen[IP地址:]端口[協議],其中ip地址與協議可爲可選項。能夠多吃使用listen指令來開啓多個端口。

² LoadModule指令:在編譯時加上—enable-so將mod_so以靜態方式編譯到Apache核心模塊中,LoadModule指令的做用就是加載模塊。

² LoadFile指令:經過絕對路徑加載modules目錄下的模塊文件。

² serverAdmin指令:提供一個解決問題的郵件地址。

² ServeName指令:設置服務器本機的主機名稱和端口,對URL地址的重定向很重要。

² DocumentRoot指令:設置Web服務對客戶端開放可見的文檔根目錄,也就是客戶端訪問網站的根路徑,默認爲/usr/local/apache2/htdocs。

² ErrorLog指令:定位服務器錯誤日誌的位置,默認使用相對路徑,爲ServerRoot目錄下的「logs/error_log」文件。

² ErrorLogFormat指令:設置錯誤日誌的格式,Apache HTTP Server預先定義了不少格式字串能夠直接引用。

² CustomLog指令:該指令設置客戶端的訪問日誌文件以及日誌格式,格式爲「logs/access_log」,語法格式爲CustomLog 文件名 格式

² LogFormat指令:該指令描述用戶日誌文件格式,能夠直接使用Apache預先設置的格式字串,通常咱們會爲LogFormat指令設置的日子格式格式建立別名。

² Include指令:語法格式爲:Options[+|-]選項[[+|0-]選項]。選項能夠設置爲None,表明不啓動任何額外的功能。也可使用以下經常使用選項:All,開啓除MultiViews以外的全部選項;ExecCGI:容許執行Options指定目錄下的全部CGI腳本;FollowSymlinks:容許Options指定目錄下的文件連接到目錄外的文件或目錄。Indexes:若是與URL對應的Options目錄下找不到DirectoryIndex指定的首頁文檔,則Apache將會把當前目錄的全部文件索引出來。

² Order指令:控制默認訪問狀態以及Allow和Deny的次序,若是使用Order deny,allow,則先檢查拒絕,而後在容許。若是有衝突,容許優先,默認規則爲容許。若是使用Order allow,deny,則先檢查容許,而後在拒絕。若是有衝突,拒絕優先,默認規則爲拒絕。例如:

案例一,全部都拒絕:

Order deny,allow

Deny from all

案例二,除192.168.118.254之外都拒絕:

Order allow,deny

Allow from 192.168.118.254

案例三,拒絕全部:

Order allow,deny

Allow from 192.168.118.254

Deny from All

案例四:除192.168.118.254之外都拒絕:

Order deny,allow

Deny from all

Allow from 192.168.118.254

² ifDefine容器:僅在啓動Apache時測試條件爲真纔會被處理,測試條件須要在啓動Apache時經過httpd –D定義。語法格式爲:<IfDefine>指令</IfDefine>

<IfDefine MemCache>

LoadModule mem_cache_module modules/mod_mem_cache.so

</IfDefine>

說明只有在啓動Apache時,若是使用了httpd –D Memcache,這Apache將加載mod_mem_cache模塊,若是沒有則Apache將不加載這些模塊。

² ifModule容器

使用IfModule容器能夠封裝僅在條件知足時纔會處理的指令。語法格式:<IfModule[!]模塊>指令</IfModule>

例子:

<IfModule unixd_module>

User daemon

Group daemaon

</IfModule>

僅在加載了unixd_module模塊後,User daemon和Group daemon纔會被Apache處理。

² Directory容器:僅應用特定的文件系統目錄、子目錄以及目錄下的內容,語法格式:<Directory directory-path>指令</Directory>。路徑可使用~匹配正則表達式。

例子:

<Directory 「/usr/local/apche2/htdocs」>

Options Indexs FollowSymLinks

</Directory>

Options Indexs FollowSymLinks僅對/usr/local/apache2/htdocs目錄有效。

² <DirectoryMatch>:相似於Directory,但能夠直接使用正則表達式匹配。無須要使用~符號才能夠匹配。

² File容器:相似於Directory,但Files容器內的指令應用於特定的文件,語法格式爲:<File 文件名>指令</File>

² FilesMatch容器:相似於File,但能夠直接使用正則表達式匹配。無須要使用~符號才能夠匹配。

² Location容器:僅對特定的URL有效,語法格式:<Location URL-path|URL>指令</Location>

² LocationMathch容器和VirtualHost容器

虛擬主機應用案例:

將主配置文件的語句開啓:

[root@localhost ~]# gedit /usr/local/apache2/conf/httpd.conf

去掉註釋

Include conf/extra/httpd-vhosts.conf

更改httpd-vhosts.conf文件

<VirtualHost *:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot "/usr/local/apache2/htdocs/example"

ServerName www.example.com

ServerAlias web.example.com

ErrorLog "logs/example.com-error_log"

CustomLog "logs/example.com-access_log" common

</VirtualHost>

<VirtualHost *:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot "/usr/local/apache2/htdocs/test"

ServerName www.test.com

ServerAlias web.test.com

ErrorLog "logs/test.com-error_log"

CustomLog "logs/test.com-access_log" common

</VirtualHost>

開啓:

[root@localhost ~]# mkdir -p /usr/local/apache2/htdocs/{example,test}

[root@localhost ~]# echo "example.com">/usr/local/apache2/htdocs/example/index.html

[root@localhost ~]# echo "test.com">/usr/local/apache2/htdocs/test/index.html[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

[root@localhost ~]# service iptables save

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

[root@localhost ~]# /usr/local/apache2/bin/apachectl restart

網站安全應用案例:

TLS(Transport Layer Security)是對SSL的擴展和優化,它能夠提供數據安全,同時確保數據的完整性。Apache HTTP Server經過mod_ssl模塊來實現對SSL/TLS的支持。

部署證書

[root@localhost ~]# openssl genrsa -out server.key 2048

Generating RSA private key, 2048 bit long modulus

...................................+++

...+++

e is 65537 (0x10001)

[root@localhost ~]# openssl req -new -x509 -key server.key -out server.crt

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:Guangzhou

Locality Name (eg, city) [Default City]:Guangzhou

Organization Name (eg, company) [Default Company Ltd]:ABC

Organizational Unit Name (eg, section) []:tech

Common Name (eg, your name or your server's hostname) []:web1

Email Address []:abc@gmail.com

[root@localhost ~]# cp {server.key,server.crt} /usr/local/apache2/conf/

修改Apache配置文件,主配置文件中須要加載mod_ssl以及mod_socache_shmcb兩個模塊,同時使用Include指令讀取conf/extra目錄下的http-ssl配置文件。

[root@localhost ~]# gedit /usr/local/apache2/conf/httpd.conf

去掉註釋

LoadModule ssl_module modules/mod_ssl.so

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

[root@localhost ~]# gedit /usr/local/apache2/conf/extra/httpd-ssl.conf

修改內容:

Listen 443

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

SSLPassPhraseDialog builtin

SSLSessionCache "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"

SSLSessionCacheTimeout 300

<VirtualHost _default_:443>

DocumentRoot "/usr/local/apache2/htdocs/secret"

ServerName www.abc.com:443

ServerAdmin you@example.com

ErrorLog "/usr/local/apache2/logs/error_log"

TransferLog "/usr/local/apache2/logs/access_log"

SSLEngine on

SSLCertificateFile "/usr/local/apache2/conf/server.crt"

SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">

SSLOptions +StdEnvVars

</FilesMatch>

<Directory "/usr/local/apache2/cgi-bin">

SSLOptions +StdEnvVars

</Directory>

BrowserMatch "MSIE [2-5]" \

nokeepalive ssl-unclean-shutdown \

downgrade-1.0 force-response-1.0

CustomLog "/usr/local/apache2/logs/ssl_request_log" \

"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

[root@localhost ~]# mkdir -p /usr/local/apache2/htdocs/secret

[root@localhost ~]# echo "secret">/usr/local/apache2/htdocs/secret/index.html

[root@localhost ~]# /usr/local/apache2/bin/apachectl restart

[root@localhost ~]# iptables -I INPUT -p tcp --dport 443 -j ACCEPT

[root@localhost ~]# service iptables save

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

[root@localhost ~]# gedit /etc/hosts

相關文章
相關標籤/搜索